php - 分组输出多维数组

标签 php arrays multidimensional-array

我有一个多维数据数组,代表连接到我们服务器的用户列表。每个数组都包含有关连接的信息。同一用户可以连接到不同服务器上任意数量的端口。

Array(  [0] => Array(
            [0] => serverA
            [1] => port1,
            [2] => user1,
            [3] => ip1
        ),
        [1] => Array(
            [0] => serverB
            [1] => port2,
            [2] => user2,
            [3] => ip2
            ),
        [2] => Array(
            [0] => serverC
            [1] => port1,
            [2] => user3,
            [3] => ip3
            ),  
        [3] => Array(
            [0] => serverA
            [1] => port1,
            [2] => user4,
            [3] => ip4
            ),  
        [4] => Array(
            [0] => serverB
            [1] => port4,
            [2] => user5,
            [3] => ip5
            ),  
        [5] => Array(
            [0] => serverC
            [1] => port1,
            [2] => user6,
            [3] => ip6
            ),
        [6] => Array(
            [0] => serverA
            [1] => port2,
            [2] => user7,
            [3] => ip7
            ),              
)

我需要先按服务器分组,然后按端口分组,然后打印出一个列表,显示每个服务器和端口的已连接用户,如下所示:

ServerA
    port1
        user1,ip1
        user4,ip4
    port2
        user7,ip2
ServerB
    port2
        user2,ip2
    port4
        user5,ip5
ServerC
    port1
        user3,ip3
        user6,ip6

我对如何处理这个问题感到困惑。我应该使用多维数组排序函数(例如 array_multisort)还是应该构建一个新数组?一个例子将不胜感激。

最佳答案

您可以创建一个新数组,在其中汇总数据,然后以所需格式打印:

$newArr = array();

foreach($arr as $k => $v) {
        if(!isset($newArr[$v[0]][$v[1]])) {
                $newArr[$v[0]][$v[1]] = array();
        }
        $newArr[$v[0]][$v[1]][] = array($v[2],$v[3]);
}

foreach($newArr as $k => $v) {
        echo $k,"\n";
        foreach($v as $k1 => $v1) {
                echo "\t$k1\n";
                foreach($v1 as $k2 => $v2) {
                        echo "\t\t", $v2[0],",",$v2[1],"\n";
                }
        }

        echo "\n";
}

See it

关于php - 分组输出多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6290339/

相关文章:

php - Doctrine2 一对多/多对一关系给出重复记录

Java 相当于 Kotlin 中的 arrayof()/listof()/setof()/mapof()

javascript - JS Lodash : Multidimensional array to object, 有所变化

php - 在外部PHP文件中使用PDO连接mysql数据库

php - 将自定义西类牙日期时间格式转换为 MySQL 时间戳而不截断

php - MySQL在where子句中多次查询同一个字段

arrays - 如何在swift中将字符串转换为 float 组

java - 有没有一种方法可以更优雅地将数组排序为偶数和奇数?

php数组生成挑战

java - 使用扫描仪从txt文件中读取字符并添加到二维数组中