我有一个多维数据数组,代表连接到我们服务器的用户列表。每个数组都包含有关连接的信息。同一用户可以连接到不同服务器上任意数量的端口。
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";
}
关于php - 分组输出多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6290339/