如何计算多维数组中某个值的数量?例如:
array(
array ('stack' => '1')
array ('stack' => '1')
array ('stack' => '1')
array ('stack' => '1')
array ('stack' => '2')
array ('stack' => '2')
)
在此示例中,结果应为:
堆栈 == 1 => 4 个匹配
堆栈 == 2 => 2 个匹配
如何计算多维数组中某个值的数量?例如:
array(
array ('stack' => '1')
array ('stack' => '1')
array ('stack' => '1')
array ('stack' => '1')
array ('stack' => '2')
array ('stack' => '2')
)
在此示例中,结果应为:
堆栈 == 1 => 4 个匹配
堆栈 == 2 => 2 个匹配
你必须自己循环它:
$counts = array();
foreach( $array as $value) {
foreach( $value as $k => $v) {
if( !isset( $counts[$k])) $counts[$k] = array();
if( !isset( $counts[$k][$v])) $counts[$k][$v] = 0;
$counts[$k][$v] += 1;
}
}
foreach( $counts as $k => $v1)
foreach( $v1 as $v => $count)
echo "$k == $v => $count matches\n";
这将打印:
stack == 1 => 4 matches
stack == 2 => 2 matches
$occur = array();
foreach ($array as $item) {
foreach ($item as $k => $v) {
$occur["$k == $v"]++;
}
}
正如雷所说,给定您的数据结构,您唯一的选择是遍历整个数组并在进行时进行计数。
如果您担心性能,您可能需要考虑使用不同的数据结构(可能与数组一起使用)。第二个数据结构类似于散列,它将数组值作为键并包含您可以在构建数组时构建的持续计数。
这样一来,您对性能的影响最小,而不必再次重申。
您需要进行一些修改,但这将对您有所帮助
<?php
function array_count_values_of($value, $array) {
$counts = array_count_values($array);
return $counts[$value];
}
$array = array(1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7);
$array2 = array_unique($array);
for($i=0 ; $i<count($array2) ; $i++)
{
$temp = array_count_values_of($array2[$i], $array);
$result[$i][0] = $array2[$i];
$result[$i][1] = $temp;
}
print_r($result);
?>
我只是简单地遍历它并将结果推送到一个新的结果数组(但我不会为你编写代码)。
您可以做更复杂的事情,例如使用带有回调函数的 array_walk/array_filter 来处理它......但这可能效率较低。
看到这篇文章: PHP多维数组计数