分组输出多维数组



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

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_multiport)还是应该构建一个新数组?举个例子将不胜感激。

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

$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$k1n";
                foreach($v1 as $k2 => $v2) {
                        echo "tt", $v2[0],",",$v2[1],"n";
                }
        }
        echo "n";
}

查看

首先,这是一个不可能的数组。因为在数组中,数组键必须是唯一的,所以serverA 不能有两个值

你有

[serverA] => Array (
        [0] => port1,
        [1] => user1,
        [2] => ip1
        ),
[serverA] => Array (
        [0] => port1,
        [1] => user4,
        [2] => ip4
        ),
[serverA] => Array (
        [0] => port2,
        [1] => user7,
        [2] => ip7
        ),

请检查数组并重新表述问题。

首先,如果您实际上打算使用一个数组来实现这一点,那么您可能希望只使用关联数组,并将端口名作为键。然而,这只会在端口和用户之间提供一对一的关系,并且每个端口需要多个用户

老实说,您需要为此创建一个PHP对象。我要做的是用我的对象表示一个服务器,每个端口都有一个数组。这样,每个端口可以存储一个以上的用户。此外,一旦你做到了这一点,你就可以编写一个方法来解析所有数组,并按你需要的方式组织它。

只有我的两美分。

我将构建一个新的数组:

$new_array = array();
foreach($old_array as $user) {
    //create new server entry, not 100% sure if it's really needed
    if(!isset($new_array[$user[0]])) $new_array[$user[0]] = array();
    //build the new array
    $new_array[$user[0]][$user[1]] = array($user[2], $user[3]);
}
print_r($new_array);

相关内容

  • 没有找到相关文章

最新更新