Я пытаюсь подсчитать количество раз, когда определенное значение появляется в моем многомерном массиве на основе условия. Вот пример массива;
$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"; }