如何计算多维数组中属于特定键的值的数量?

3
我有以下数组;
Array
(
    [2019-11-01] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 1
                    [category] => cat1
                )
        [1] => stdClass Object
            (
                [id] => 2
                [category] => cat2
            )

        [2] => stdClass Object
            (
                [id] => 3
                [category] => cat1
            )

        [3] => stdClass Object
            (
                [id] => 4
                [category] => cat2
            )

        [4] => stdClass Object
            (
                [id] => 5
                [category] => cat1
            )

        [5] => stdClass Object
            (
                [id] => 6
                [category] => cat2
            )

    )

[2019-11-03] => Array
    (
        [0] => stdClass Object
            (
                [id] => 7
                [category] => cat1
            )

    )

)

我想要获取类别的统计数据。

例如:

cat1数量: 4

cat2数量: 3

我可以使用以下代码获取cat1的结果:

$cat1count = 0;

foreach ($myArray as $date => $content) {

    foreach ($content as $value) {
        if ($value->category == "cat1") {
            $cat1count++;
        }
    }
}

echo "Cat1 count:".$cat1count;
#Outputs: Cat1 count:4

但是我想知道如何在不像上面那样硬编码分类名称的情况下,获得相同的结果

对于每个分类(cat1,cat2),如何实现呢?

提前感谢您!

1个回答

3
您可以使用array_column()的组合来从数据中提取类别值,然后使用array_count_values()计算每个日期中有多少个值。
这段代码只显示日期,然后显示每个日期中值的计数。
foreach ( $myArray as $date => $content) {
    $categories = array_column($content, "category");
    echo $date.PHP_EOL;
    print_r(array_count_values($categories));
}

如果您想要跨所有日期计算总和,只需将它们添加到总数数组中...
$totals = [];
foreach ( $myArray as $date => $content) {
    $categories = array_column($content, "category");
    foreach (array_count_values($categories) as $category => $count )  {
        $totals[$category] = ($totals[$category]??0) + $count;
    }
}

谢谢@Nigel Ren的回答。我想要得到总数,而不是每个日期的总数,但还是感谢您的时间。 - LetsSeo

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