【问题标题】:How to count a multidimensional arrays values belongs to a certain key?如何计算多维数组值属于某个键?
【发布时间】:2020-02-15 15:10:22
【问题描述】:

我有下面的数组;

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”上面所做的那样

对于每个类别 (cat1,cat2)?

提前致谢!

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    您可以使用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 的回答。我想获得总数而不是每个日期的总数,但感谢您的时间。
    猜你喜欢
    • 2012-06-26
    • 2020-01-26
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 2023-02-06
    • 1970-01-01
    相关资源
    最近更新 更多