Count specific values in multidimensional array

落花浮王杯 提交于 2019-12-17 05:12:38

问题


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.


回答1:


$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 />';
    }
}



回答2:


PHP has no support for a SQL where sort of thing, especially not with an array of arrays. But you can do the counting your own while you iterate over the data:

$count = array();
foreach($fruit as $one)
{
    @$count[$one['color']]++;
}

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

The alternative is to write yourself some little helper function:

/**
 * 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;
}

You then can get all colors:

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

And then count values:

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

That kind of helper function often is useful for multidimensional arrays. It is also suggested as a new PHP function for PHP 5.5.




回答3:


All you need is an extra counter:

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


来源:https://stackoverflow.com/questions/11558397/count-specific-values-in-multidimensional-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!