我有一个包含 200 个项目的数组。我想输出数组,但用一个共同的值对项目进行分组。类似于 SQL 的 GROUP BY 方法。这应该相对容易做到,但我还需要对组项目进行计数。
有没有人有这样做的有效方法?这将在每次页面加载时发生,因此我需要它快速且可扩展。
我可以预先将结果转储到 Lucene 或 sqlite 之类的东西中,然后在每个页面加载时对该文档运行查询吗?
任何想法将不胜感激。
我有一个包含 200 个项目的数组。我想输出数组,但用一个共同的值对项目进行分组。类似于 SQL 的 GROUP BY 方法。这应该相对容易做到,但我还需要对组项目进行计数。
有没有人有这样做的有效方法?这将在每次页面加载时发生,因此我需要它快速且可扩展。
我可以预先将结果转储到 Lucene 或 sqlite 之类的东西中,然后在每个页面加载时对该文档运行查询吗?
任何想法将不胜感激。
只需遍历数组并为组使用另一个数组。它应该足够快,并且可能比使用 sqlite 或类似工具时所涉及的开销要快。
$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;
}
}
$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";
这是一个简单的例子:
$a = array(1, 2, 3, 1, 2, 3, 3, 2, 3, 2, 3, 4, 4, 1);
$n = array_count_values($a);
arsort($n);
print_r($n);
数组( [3] => 5 [2] => 4 [1] => 3 [4] => 2 )
$aA = array_count_values(array(1,2,3,4,5,1,2,3,4,5,6,1,1,1,2,2));
$aB = array();
foreach($aA as $index=>$aux){
array_push($aB,$index);
}
print_r($aB);
结果:
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);
...还是我错过了什么?