Считать конкретные значения в многомерном массиве

Я пытаюсь подсчитать количество раз, когда определенное значение появляется в моем многомерном массиве на основе условия. Вот пример массива;

$fruit = array ( "oranges" => array( "name" => "Orange", "color" => "orange", "taste" => "sweet", "healthy" => "yes" ), "apples" => array( "name" => "Apple", "color" => "green", "taste" => "sweet", "healthy" => "yes" ), "bananas" => array( "name" => "Banana", "color" => "yellow", "taste" => "sweet", "healthy" => "yes" ), "grapes" => array( "name" => "Grape", "color" => "green", "taste" => "sweet", "healthy" => "yes" ) ); 

Если я хочу отображать все зеленые фрукты, я могу сделать следующее (дайте мне знать, если это лучший способ сделать это);

 for ($row = 0; $row < 3; $row++) { if($fruit[$row]["color"]=="green") { echo $fruit[$row]["name"] . '<br />'; } } 

Это будет выводиться;

 Apple Grape 

Это здорово, и я вижу, что у них есть 2 значения, но как я могу заставить PHP подсчитать количество фруктов, где зеленый цвет, и поместить его в переменную для меня, чтобы использовать дальше по сценарию для работы? Например, я хочу сделать что-то вроде;

 if($number_of_green_fruit > 1) { echo "You have more than 1 piece of green fruit"; } 

Я взглянул на count (); но я не вижу никакого способа добавить предложение WHERE / conditional (a la SQL).

Любая помощь могла бы быть полезна.

 $number_of_green_fruit = 0; for ($row = 0; $row < 3; $row++) { if($fruit[$row]["color"]=="green") { $number_of_green_fruit++; echo $fruit[$row]["name"] . '<br />'; } } 

PHP не поддерживает SQL where вещи, особенно не с массивом массивов. Но вы можете делать подсчет своих собственных, пока вы перебираете данные:

 $count = array(); foreach($fruit as $one) { @$count[$one['color']]++; } printf("You have %d green fruit(s).\n", $count['green']); 

Альтернативой является написать немного вспомогательной функции:

 /** * array_column * * @param array $array rows - multidimensional * @param int|string $key column * @return array; */ function array_column($array, $key) { $column = array(); foreach($array as $origKey => $value) { if (isset($value[$key])) { $column[$origKey] = $value[$key]; } } return $column; } 

Затем вы можете получить все цвета:

 $colors = array_column($fruit, 'color'); 

И затем подсчитайте значения:

 $count = array_count_values($colors); printf("You have %d green fruit(s).\n", $count['green']); 

Такая вспомогательная функция часто полезна для многомерных массивов. Он также предлагается как новая функция PHP для PHP 5.5 .

Все, что вам нужно, это дополнительный счетчик:

 for ($row = $number_of_green_fruit = 0; $row < 3; $row++) { if($fruit[$row]["color"]=="green") { echo $fruit[$row]["name"] . '<br />'; $number_of_green_fruit++; } } if($number_of_green_fruit > 1) { echo "You have more than 1 piece of green fruit"; }