2013-01-08 51 views
-1

創建新的數組我有一個數組:從另一個

Array 
(
    [users] => Array 
     (
      [101] => Array 
       (
        [odata] => Array 
         (
          [0] => 2 
          [1] => 1 
          [2] => 1 
          [3] => 1 
         ) 

       ) 

      [200] => Array 
       (
        [odata] => Array 
         (
          [0] => 2 
          [1] => 1 
          [2] => 1 
          [3] => 0 
         ) 

       ) 

     ) 

    [rjad] => Array 
     (
      [2] => Array 
       (
        [0] => red 
        [1] => blue 
        [2] => green 
       ) 

     ) 

) 

此數組[rjad]鍵= [的OData]鍵,並且在[rjad] [OData的]值=第二密鑰。

我想要的是創建一個從舊有用戶ID值在第二個數組新的數組:

這樣的:

[rjad] => Array 
      (
       [2] => Array 
        (
         [0] => red 
         [1] => Array 
            (
            [blue] => Array 
               (
               [0] => 101 
               [1] => 200 
               ) 
         [2] => green 
        ) 

      ) 

掙扎已經3小時,沒有成功。任何想法如何得到它都非常好。

圖片做解釋relatinships http://imageshack.us/photo/my-images/818/phparray.jpg/

+2

解釋「用戶」中的邏輯相關數據與「rjad」中的數據之間的關係。 –

+0

http://php.net/manual/en/function.array-merge.php –

+0

關係如下
[users] [101] [odata] [1] => 1等於[rjad] [2] [1 ] =>藍色 – drupal2000

回答

1

我會認真地重新審視自己的結構,但這裏有一個工作(如果醜)解決方案

foreach ($users as $userId => $user) { 
    foreach ($user['odata'] as $key => $value) { 
     if (isset($rjad[$key][$value])) { 
      if (!is_array($rjad[$key][$value])) { 
       $colour = $rjad[$key][$value]; 
       $rjad[$key][$value] = array(); 
       $rjad[$key][$value][$colour] = array(); 
      } else { 
       reset($rjad[$key][$value]); 
       $colour = key($rjad[$key][$value]); 
      } 
      $rjad[$key][$value][$colour][] = $userId; 
     } 
    } 
} 

工作演示 - >http://codepad.viper-7.com/IEcpvU

根據意見,似乎你可能需要一個單獨的數組,這是輕鬆解決

// copy the array and act on it instead of directly on $rjad 
$result = $rjad; 
foreach ($users as $userId => $user) { 
    foreach ($user['odata'] as $key => $value) { 
     if (isset($result[$key][$value])) { 
      if (!is_array($result[$key][$value])) { 
       $colour = $result[$key][$value]; 
       $result[$key][$value] = array(); 
       $result[$key][$value][$colour] = array(); 
      } else { 
       reset($result[$key][$value]); 
       $colour = key($result[$key][$value]); 
      } 
      $result[$key][$value][$colour][] = $userId; 
     } 
    } 
} 
+0

這將無法正常工作,因爲'用戶'和'rjad'是不同的密鑰請檢查IMG http://imageshack.us/photo/my-images/818/phparray.jpg/ – drupal2000

+0

@ drupal2000,你真的嘗試過了嗎?基於你提供的數組,它返回你期待的結果。上面的映射位於odata鍵而不是用戶標識鍵。 – Crisp

+0

不好意思,但是你的代碼不會工作,因爲我沒有看到你如何從[rjad]獲取數據。有數組$ somearray,它由$ somearray ['users']和$ someaaray ['rajd']組成。你的代碼只處理$ somearray ['users']。我想從tese中獲得新的數組。我不明白從上面的代碼中獲得$ rjad的位置? – drupal2000

0

你的問題還不完全清楚 - 是什麼rjad之間的關係......藍色和這些用戶從其他陣列的帳戶? odata數組中的項目0是默認顏色嗎?

+0

對不起,應該是一個問題,而不是一個答案 - 第一次! – puppyFlo

+0

我添加了圖片發佈解釋關係 – drupal2000