我有一个多维数组。我想搜索值(用户名IE jon(并计算特定用户名的总"是"。
IE 根据下面的数组,Andew 重复三次索引 1,3,4,其值为"YES",因此 Andrew 的总"YES"计数值 = 3
Jon 重复两次,但其值为"NO",因此其值 = 0
Array
(
[0] => Array
(
[0] => Jon
[1] => NO
)
[1] => Array
(
[0] => Andew
[1] => NO
)
[2] => Array
(
[0] => Walid
[1] => YES
)
[3] => Array
(
[0] => Andew
[1] => YES
)
[4] => Array
(
[0] => Andew
[1] => YES
)
[5] => Array
(
[0] => Jon
[1] => NO
)
[6] => Array
(
[0] => Andew
[1] => YES
)
)
我想使用户作为键和值=计算"是"的总数。
输出
Array
(
john => 0,
Andew => 3
Walid => 1
)
任何人,请提出可能的解决方案?
谢谢
您可以使用array_reduce
:
$stats = array_reduce($array, static function ($stats, $entry) {
$stats[$entry[0]] = ($stats[$entry[0]] ?? 0) + ($entry[1] === 'YES' ? 1 : 0);
return $stats;
});
这将构建一个$stats
数组,将其初始值设置为每个人的 0,并在找到YES
时将其递增 1。
演示:https://3v4l.org/NmZ7G
如果您只需要"YES"的计数,则以下内容将输出一个计数。
$count_array = [];
foreach($array as $values){
if(!isset($count_array[$values[0]])){
$count_array[$values[0]] = 0;
}
if($values[1] === 'YES'){
$count_array[$values[0]] ++;
}
}
print_r($count_array);
(与@Jeto的array_reduce没有太大区别。
一个简单的foreach:
<?php
$data =
[
['Brian', 'YES'],
['Brian', 'YES'],
['Charles', 'NO'],
['Charles', 'YES'],
['Nicola', 'NO']
];
foreach($data as list($name, $yes_no))
$yes_counts[$name] = ($yes_counts[$name] ?? 0) + (int) ($yes_no === 'YES');
var_export($yes_counts);
输出:
array (
'Brian' => 2,
'Charles' => 1,
'Nicola' => 0,
)