以组的形式输出多维数组

问题描述:

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

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

首先这是不可能的数组。因为数组中的数组的键必须是唯一的,所以你不会能有两个值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 
     ), 

请检查阵列和重新词组的问题。

+0

对不起,愚蠢的错误。我编辑了数组。 – Michelle 2011-06-09 09:21:21

首先,如果你实际上gonig使用这个数组,你想独占使用关联数组,你的端口名称作为关键字。然而,这只会给你端口和用户之间的一比一的关系,并希望每个端口的多个用户。

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

只是我的两分钱。

我将建立一个新的数组:

$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);