2011-06-09 36 views
3

我有一個多維數組數組,代表連接到我們的服務器的用戶列表。每個數組都包含有關連接的信息。同一個用戶可以連接到不同服務器上的任意數量的端口。以組的形式輸出多維數組

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)還是應該構建一個新的數組?一個例子將不勝感激。

回答

2

您可以創建一個新的數組,你彙總數據,然後在需要的格式打印:

$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

1

首先這是不可能的數組。因爲數組中的數組的鍵必須是唯一的,所以你不會能有兩個值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

1

首先,如果你實際上gonig使用這個數組,你想獨佔使用關聯數組,你的端口名稱作爲關鍵字。然而,這隻會給你端口和用戶之間的一比一的關係,並希望每個端口的多個用戶。

老實說,你將需要創建一個PHP Object這一點。我要做的是用我的對象來表示一個服務器,併爲每個端口提供一個數組。這樣,您可以爲每個端口存儲多個用戶。此外,一旦你這樣做了,你可以寫一個方法來解析所有的數組,並以你需要的方式組織它。

只是我的兩分錢。

0

我將建立一個新的數組:

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