给定以下数组 $mm
$mm
Array ( [147] => Array ( [pts_m] => [pts_mreg] => 1 [pts_cg] => 1 ) [158] => Array ( [pts_m] => [pts_mreg] => [pts_cg] => 0 ) [159] => Array ( [pts_m] => [pts_mreg] => 1 [pts_cg] => 1 ) )
当我运行时,由于它不是递归的,所以会count(array_filter($mm))得到3结果。
count(array_filter($mm))
3
count(array_filter($mm), COUNT_RECURSIVE)也不会这样做,因为我实际上需要array_filter递归运行,然后计算其结果。
count(array_filter($mm), COUNT_RECURSIVE)
array_filter
所以我的问题是:array_filter($mm)在这种情况下如何递归运行?我的预期结果是4。
array_filter($mm)
4
请注意,我没有使用任何回调,因此可以排除false,null和empty。
应该管用
$count = array_sum(array_map(function ($item) { return ((int) !is_null($item['pts_m']) + ((int) !is_null($item['pts_mreg']) + ((int) !is_null($item['pts_cg']); }, $array);
或许
$count = array_sum(array_map(function ($item) { return array_sum(array_map('is_int', $item)); }, $array);
肯定还有更多可能的解决方案。如果你想使用array_filter()(没有回调)记住,它把0为false过,因此它会 删除 任何0从数组-值。
array_filter()
0
false
如果您在5.3之前的版本中使用PHP,则应使用foreach-loop
foreach
$count = 0; foreach ($array as $item) { $count += ((int) !is_null($item['pts_m']) + ((int) !is_null($item['pts_mreg']) + ((int) !is_null($item['pts_cg']); }
关于以下评论:
Thx @kc我实际上希望该方法删除false,0,空等
当这仅仅是您想要的时,解决方案也非常简单。但是现在我不知道该如何解释
我的预期结果是5。
无论如何,它现在很短:)
$result = array_map('array_filter', $array); $count = array_map('count', $result); $countSum = array_sum($count);
结果数组看起来像
Array ( [147] => Array ( [pts_mreg] => 1 [pts_cg] => 1 ) [158] => Array ( ) [159] => Array ( [pts_mreg] => 1 [pts_cg] => 1 ) )