Count specific values in multidimensional array

Viewed 23122

I'm trying to count the number of times a certain value appears in my multidimensional array based on a condition. Here's an example array;

$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"
                              )
            );

If I want to DISPLAY all green coloured fruit, I can do the following (let me know if this is the best way of doing it);

for ($row = 0; $row < 3; $row++) {

    if($fruit[$row]["color"]=="green") {

         echo $fruit[$row]["name"] . '<br />';

    }

}

This will output;

Apple
Grape

That's great and I can see their are 2 values there, but how can I actually get PHP to count the number of fruit where the colour is green and put it in a variable for me to use further down the script to work stuff out? E.g. I want to do something like;

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

I've taken a look at count(); but I don't see any way to add a 'WHERE/conditional' clause (a la SQL).

Any help would be really appreciated.

4 Answers

With PHP 5.4+ you can have this short snippet to count specific values (don't even need to declare the $count variable previously)

array_walk_recursive($fruit, function ($i) use (&$count) {
    $count += (int) ($i === 'green');
});

var_dump($count); // Outputs: int(2)
Related