2016-08-17 2 views
0

배열 = ("사과", "사과", "바나나", "사과")와 같은 1 차원 배열에서 2 차원 배열로 이동하려고합니다. Array = ("apple", 3), ("banana", 1)배열의 숫자 값을 계산하는 코드는

다음 코드는 0을 계속 유지합니다.

$result = mysqli_query($con, "SELECT * FROM Entries WHERE Trial=$trial"); 
$activities = array(); 
while($row = mysqli_fetch_assoc($result)) 
{ 
    $activityCatID = $row['Activity']; 
    $resulting = mysqli_query($con,"SELECT ActivityCategory FROM Activity WHERE ActivityID=$activityCatID"); 
    array_push($activities, mysqli_fetch_assoc($resulting)); 
} 

if(sizeof($activities) > 0) 
{  
    $act_and_count = array(); 
    $temp = $activities[0]; 

    for($ii = 0; $ii < sizeof($activities); $ii++) 
    { 
     if(!search_array($activities[$ii], $act_and_count)) 
     { 
      $temp = $activities[$ii];    
      $cnt = count(array_filter($activities, create_function('$a', 'return $a==\'' .$temp. '\';')));       
      $act_and_count[] = array("Activity" => $activities[$ii], "Count" => $cnt);      
     }  
    } 
} 
+3

아마도'array_count_values ​​()'? 아니면 당신의 계산을 할 수있는 SQL을 얻을 –

+1

먼저 사용하는 PDO 둘째, SQL 수준에서 카운트를 할 당신은 더 나은 성능을 얻을 수 –

+0

필드의 값을 즉 초기 쿼리를 모르는 경우 SQL에서 어떻게 할 것이라고? 특정 재판에서 모든 데이터는 2 가지 유형의 활동을 반환하지만 다른 재판은 더 많거나 적은 유형의 재판을 반환 할 수 있습니까? –

답변

2
당신이 당신의 예에서 ( ActivityCategory하여이 두 테이블과 동호회에 가입 어디는 무엇으로 변경되지 않은 내가, 그건 당신이로 그룹화 할 키 생각 간단한 SQL 쿼리와 함께이 모든 작업을 수행 할 수 있습니다

필요).

SELECT a.ActivityCategory , count(*) as Count FROM Entries e 
INNER JOIN Activity a 
ON e.Activity = a.ActivityID 
WHERE e.Trial=$trial 
GROUP BY a.ActivityCategory 

이 쿼리를 실행 한 후에는 두 개의 열이 표시됩니다. 처음에는 활동 카테고리가 있으며 두 번째 숫자가 있습니다. 나는 이것을 당신이 좋아하는 배열 구조로 옮길 수 있다고 생각합니다.

또한 기존의 사용되지 않는 메소드를 사용하고 있으므로 mysql 연결/쿼리를 PDO로 변경하십시오.

관련 문제