2017-01-19 2 views
3

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

Array 
(
    [0] => Array 
     (
      [item] => 'Banana' 
     ) 

    [1] => Array 
     (
      [item] => 'Banana' 

     ) 

    [2] => Array 
     (
      [item] => 'Cherry' 
     ) 

    [3] => Array 
     (
      [item] => 'Apple' 

     ) 
) 

Например, для этого массива, я должен найти 2 для Banana.

Si Я пробовал:

$i=0; 
foreach($array as $arr) { 
    if($arr[item]=='Banana') { $i++; } 
} 

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

Спасибо.

+0

Что не так с этим решением? – Rasclatt

+1

И я думаю, вы будете брошены с ошибкой, если условие 'item' без кавычек! – Thamilan

+0

вы можете комбинировать 'sizeof()' и 'array_filter()' –

ответ

2

Метод 1:

Использование встроенных функций - array_column и array_count_values:

print_r(array_count_values(array_column($arr,'item'))); 

Метод 2:

Использование Еогеасп с простой логикой принятия вашего фрукты как ключ и его значение как значение:

$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']; 
+0

Ваше решение более интересно, чем мое. :) –

+0

@FAD Оформить обновленный! Простейший со встроенными функциями – Thamilan

+0

В вашем первом методе, как я могу указать элемент, который я хочу подсчитать (т. Е .: «Банана»)? –

0

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

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

print_r(array_count_values($new)); 

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

Смежные вопросы