Как подсчитать в многомерном массиве количество элементов со специальным условием?
Array
(
[0] => Array
(
[item] => 'Banana'
)
[1] => Array
(
[item] => 'Banana'
)
[2] => Array
(
[item] => 'Cherry'
)
[3] => Array
(
[item] => 'Apple'
)
)
Например, для этого массива я должен найти 2
за Banana
,
Я попробовал:
$i=0;
foreach($array as $arr) {
if($arr[item]=='Banana') { $i++; }
}
Есть ли лучшее решение, пожалуйста?
Благодарю.
Способ 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
)
Поэтому, когда вам нужен счет Банана, вы можете получить его так:
echo $countArr['Banana'];
использование array_count_values()
Это довольно просто:
foreach($array as $arr) {
$new[] = $arr['item'];
}
print_r(array_count_values($new));
Кстати, в вашем подходе нет ничего плохого, если только вы не хотите посчитать все значения. Также на заметку, я думаю, вы найдете foreach()
будет немного быстрее, чем array_column()
особенно на большом массиве.