2016-08-17 73 views
0

我想从一个数组,如 array =(“apple”,“apple”,“banana”,“apple”) 到2d数组 Array =(“apple”,3),(“banana”,1)计数次数值出现在数组中php

我有下面的代码,它会一直返回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

你可以做到这一切与一个简单的SQL查询,你加入这个两个表和组通过ActivityCategory(从你的例子,我认为这是你的希望组中的关键,是不是与你改变想)。

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。