根据搜索条件使新数组形成多维数组



我有一个多维数组。我想搜索值(用户名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,
)

最新更新