首页 > 解决方案 > php复杂数组排序到表

问题描述

我有以下数组...

Array
(
    [main] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name_one] => banana
                    [name_two] => 
                )

            [1] => Array
                (
                    [id] => 2
                    [name_one] => orange
                    [name_two] => banana
                )

            [2] => Array
                (
                    [id] => 3
                    [name_one] => 
                    [name_two] => orange
                )

            [3] => Array
                (
                    [id] => 4
                    [name_one] => pear
                    [name_two] => 
                )
            [4] => Array
                (
                    [id] => 5
                    [name_one] => pear
                    [name_two] => mango
                )
            [5] => Array
                (
                    [id] => 6
                    [name_one] => 
                    [name_two] => 
                )

        )

)

背后的逻辑如下,如果字段“name_two”不为空,则忽略“name_one”并仅计算“name_two”。如果字段“name_two”为空,则取“name_one”并计数。如果两者都是空的..没有计数。

上述数组的结果应如下表所示...

------------------------------
category   |  total
------------------------------
banana     |    2
-----------------------------
orange     |    1
-----------------------------
pear       |    1
-----------------------------
mango      |    1
-----------------------------
Total      |    5

我尝试了不同的方法,包括 php 中的 foreach、for 和 while 循环,但没有运气……我如何在 php 中实现上面的表格?

如果很容易,数组结构会改变吗?非常欢迎您根据需要进行更改,我可以在这里进行调整。主要问题是从数组生成表,看起来像上面的结构。

标签: phparraysmultidimensional-array

解决方案


像这样的东西会做你想做的事。它处理数组的每个元素,查找有效值name_two,如果不是,则查找有效值name_one,并增加该值的计数。

$counts = array();
foreach ($array['main'] as $item) {
    if (!empty($item['name_two'])) {
        @$counts[$item['name_two']]++;
    }
    elseif (!empty($item['name_one'])) {
        @$counts[$item['name_one']]++;
    }
}
foreach ($counts as $key => $count) {
    echo "$key: $count\n";
}

输出:

banana: 2
orange: 1 
pear: 1 
mango: 1

3v4l.org 上的演示

注意我@在增量语句前面使用以避免在第一次遇到名称时出现“未定义索引”错误。如果你不想这样做,你可以使用 ?? PHP7 中的(NULL 合并运算符)例如

$counts[$item['name_two']] = ($counts[$item['name_two']] ?? 0) + 1;

或在 PHP 7 之前

$counts[$item['name_two']] = (isset($counts[$item['name_two']]) ? $counts[$item['name_two']] : 0) + 1;

推荐阅读