[英]how to count nb of occurrences of a value in arays inside an array?
如果我有以下数组:
Array (
[0] => Array ( [0] => 4555 [1] => 1 )
[1] => Array ( [0] => 4555 [1] => 1 )
[2] => Array ( [0] => 4350 [1] => 1 )
[3] => Array ( [0] => 4033 [1] => 2 )
[4] => Array ( [0] => 4159 [1] => 1 )
)
我如何计算大数组内所有数组中存在的'4555'出现的Nb个?
也许这可以帮助您:
<?php
$a = Array (Array (4555,1), Array (4555,1),Array (4350,1 ),Array (4033,2 ),Array (4159,1 ));
function array_keys_multi($array,&$vals)
{
foreach ($array as $key => $value) {
if (is_array($value)) {
array_keys_multi($value,$vals);
}else{
$vals[] = $value;
}
}
return $vals;
}
$z = array_keys_multi($a);
print_r(array_count_values($z));
?>
Array
(
[4555] => 2
[1] => 4
[4350] => 1
[4033] => 1
[2] => 1
[4159] => 1
)
您需要两个周期。 像这样:
$counter = array();
for ($i = 0; $i < count($array); $i++) {
$subArray = $array [$i];
for ($j = 0; $j < count ($subArray); $j++) {
$val = $subArray [$j];
$count = isset ($counter [$val]) ? $counter [$val] : 0;
$counter [$val] = $count + 1;
}
}
在这里您可以打印$ counter值:
foreach ($counter as $k => $v) {
echo 'Count for ' . $k . ' is ' . $v;
}
您也可以使用array_reduce :
$arr = array (
0 => array ( 0 => 4555, 1 => 1 ),
1 => array ( 0 => 4555, 1 => 1 ),
2 => array ( 0 => 4350, 1 => 1 ),
3 => array ( 0 => 4033, 1 => 2 ),
4 => array ( 0 => 4159, 1 => 1 )
);
function f($x, $y){
$x += in_array(4555, $y)?1:0;
return $x;
}
print array_reduce($arr, "f",0);
输出:
2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.