繁体   English   中英

如何计算数组中aray值的出现次数nb?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM