如何在多维数组中计算具有特殊条件的元素数?
Array
(
[0] => Array
(
[item] => 'Banana'
)
[1] => Array
(
[item] => 'Banana'
)
[2] => Array
(
[item] => 'Cherry'
)
[3] => Array
(
[item] => 'Apple'
)
)
例如,对于此数组,我应该找到2
的{{1}}。
Banana
请问有更好的解决方案吗?
感谢。
答案 0 :(得分:2)
方法1:
使用内置函数 - array_column
和array_count_values
:
print_r(array_count_values(array_column($arr,'item')));
方法2:
将foreach与简单的逻辑结合起来,使你的水果成为关键,并将其视为价值:
$arr = [
["item"=>"Banana"],
["item"=>"Banana"],
["item"=>"Cherry"],
["item"=>"Apple"]
];
$countArr = [];
foreach ($arr as $value) {
$item = $value['item'];
if(array_key_exists($item, $countArr)) // If key exists, increment its value
$countArr[$item]++;
else // Otherwise, assign new key
$countArr[$item] = 1;
}
print_r($countArr);
两种情况下的最终结果将是:
Array
(
[Banana] => 2
[Cherry] => 1
[Apple] => 1
)
所以当你想要Banana的数量时,你可以这样得到它:
echo $countArr['Banana'];
答案 1 :(得分:0)
使用SqlCommand.ExecuteScalar
,非常简单:
array_count_values()
另一方面,除非您想要计算所有值,否则您的方法没有任何问题。另外在旁注中,我认为你会发现foreach($array as $arr) {
$new[] = $arr['item'];
}
print_r(array_count_values($new));
会比foreach()
稍微快一点,特别是在大阵列上。