显示并计算来自2D数组的符合条件的数据

12

我正在尝试根据条件计算多维数组中某个值出现的次数。以下是一个示例数组:

$fruit = [
    "oranges" => [
        "name"    => "Orange",
        "color"   => "orange",
        "taste"   => "sweet",
        "healthy" => "yes"
    ],
    "apples" => [
        "name"    => "Apple",
        "color"   => "green",
        "taste"   => "sweet",
        "healthy" => "yes"
    ],
    "bananas" => [
        "name"    => "Banana",
        "color"   => "yellow",
        "taste"   => "sweet",
        "healthy" => "yes"
    ],
    "grapes" => [
        "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实际计算颜色为green的水果数量,并将其放入一个变量中,以便在脚本后面进一步使用来处理其他事情?

我想做这样的事情;

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

我已经查看了count(),但我没有找到任何向该函数调用添加条件逻辑的方法。


不要输出名称,而是输出计数。0 + 1 + 1 + 1 + 1 .... - hakre
4个回答

14

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 5.5 的新 PHP 函数。


10
$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 版本中,你可以像 这样foreach() 循环内使用数组解构。 - mickmackusa

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

1

使用PHP 5.4+,您可以使用这个简短的代码片段来计算特定值(甚至不需要先声明$count变量)

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

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

$i不是一个直观的变量名,用于存储valuewordcolor - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接