Подсчитать элемент из массива в переполнении стека

Как подсчитать в многомерном массиве количество элементов со специальным условием?

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++; }
}

Есть ли лучшее решение, пожалуйста?

Благодарю.

3

Решение

Способ 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'];
2

Другие решения

использование array_count_values()Это довольно просто:

foreach($array as $arr) {
$new[]  =   $arr['item'];
}

print_r(array_count_values($new));

Кстати, в вашем подходе нет ничего плохого, если только вы не хотите посчитать все значения. Также на заметку, я думаю, вы найдете foreach() будет немного быстрее, чем array_column()особенно на большом массиве.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector