PHP中的数组分组

PHP中的数组分组,php,arrays,algorithm,data-structures,grouping,Php,Arrays,Algorithm,Data Structures,Grouping,我有一个200项的数组。我想输出数组,但用一个公共值对项目进行分组。类似于SQL的GROUPBY方法。这应该是相对容易做到的,但我还需要一组项目的计数 有没有人有一个有效的方法来做到这一点?这将发生在每个页面加载,所以我需要它是快速和可扩展的 我是否可以预先将结果转储到Lucene或sqlite中,然后在每次加载页面时对该文档运行查询 如果您有任何想法,我们将不胜感激。只需在数组上迭代,并为组使用另一个数组即可。它应该足够快,并且可能比使用sqlite或类似工具时所涉及的开销要快 $groups

我有一个200项的数组。我想输出数组,但用一个公共值对项目进行分组。类似于SQL的GROUPBY方法。这应该是相对容易做到的,但我还需要一组项目的计数

有没有人有一个有效的方法来做到这一点?这将发生在每个页面加载,所以我需要它是快速和可扩展的

我是否可以预先将结果转储到Lucene或sqlite中,然后在每次加载页面时对该文档运行查询


如果您有任何想法,我们将不胜感激。

只需在数组上迭代,并为组使用另一个数组即可。它应该足够快,并且可能比使用sqlite或类似工具时所涉及的开销要快

$groups = array();
foreach($items as $item)
    $groups[$item['value']][] = $item;
foreach($groups as $value => $items)
    echo 'Group ' . $value . ' has ' . count($items) . ' ' . (count($items) == 1 ? 'item' : 'items') . "\n";
$groups = array();
foreach ($data as $item) {
    $key = $item['key_to_group'];
    if (!isset($groups[$key])) {
        $groups[$key] = array(
            'items' => array($item),
            'count' => 1,
        );
    } else {
        $groups[$key]['items'][] = $item;
        $groups[$key]['count'] += 1;
    }
}

下面是一个简单的例子:

$a = array(1, 2, 3, 1, 2, 3, 3, 2, 3, 2, 3, 4, 4, 1);
$n = array_count_values($a);
arsort($n);
印刷费($n)

排列( [3] => 5 [2] => 4 [1] => 3 [4] =>2)

结果:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 
带有[3]个元素的“$Switches”数组
0
开关ID 1
名字k�  
类型输出
显示按钮
重视
groupname group1
1数组[6]
2阵列[6]
//这将按groupname排序
$result=array();
$target=计数($Switches);

对于($i=0;$iLucene或sqlite很可能比PHP解决方案效率低得多。请看这一个:应该有解决您的问题的方法,只要sql Server在大多数情况下更快就可以了。设置非常重要。这就是我错过的
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 
"$Switches" Array with [3] elements
0       
    SwitchID    1   
    name    k�  
    type    output  
    displayAs   button  
    value   on  
    groupname   group1  
1   Array [6]   
2   Array [6]   


// this will sort after groupname

$result = array();
$target = count($Switches);
for($i=0;$i<$target;$i++)
{
    $groupname = $Switches[$i]["groupname"];

    $result[$groupname][] = $Switches[$i];
}

// count amount of groups
$groupCount = count($result);