2016-08-08 104 views
0

我需要合併兩個「三維」數組,但我的問題是,當第一個數組鍵與另一個相同時,結果只是...不是可取的。嘗試合併兩個多維數組並保留鍵

的位置例如:

$a = array(
     1=>array(
       -1 => array(-1=>'a: 1 -1 -1',0=>'a: 1 -1 0',1=>'a: 1 -1 1'), 
       0 => array(-1=>'a: 1 0 -1', 0=>'a: 1 0 0', 1=>'a: 1 0 1'), 
       1 => array(-1=>'a: 1 1 -1', 0=>'a: 1 1 0', 1=>'a: 1 1 1') 
     ) 
); 

$b = array(
     1=>array(
       1 => array(-1=>'b: 1 1 -1',0=>'b: 1 1 0',1=>'b: 1 1 1'), 
       2 => array(-1=>'b: 1 2 -1',0=>'b: 1 2 0',1=>'b: 1 2 1'), 
       3 => array(-1=>'b: 1 3 -1',0=>'b: 1 3 0',1=>'b: 1 3 1') 
     ) 
); 

做$ A + $ B的結果是:

Array 
(
    [1] => Array 
     (
      [-1] => Array 
       (
        [-1] => a: 1 -1 -1 
        [0] => a: 1 -1 0 
        [1] => a: 1 -1 1 
       ) 

      [0] => Array 
       (
        [-1] => a: 1 0 -1 
        [0] => a: 1 0 0 
        [1] => a: 1 0 1 
       ) 

      [1] => Array 
       (
        [-1] => a: 1 1 -1 
        [0] => a: 1 1 0 
        [1] => a: 1 1 1 
       ) 

     ) 

) 

,我需要告訴PHP,「哎,鍵[1] [ 2] [b]中的[X]和[1] [3] [X]不在'a'數組中,因此將它們合併到結果中。

我甚至都不在乎在三個鍵都相同的情況下,哪一個PHP將要執行的操作。鍵的值是字符串,所以我也沒有興趣總結這些值。我需要保留鍵,這樣一個簡單的array_merge就沒用了。也許我需要將它與其他功能結合起來,但我看不到哪一個。

在此先感謝。

+0

出於興趣,您是否嘗試過使用[array_merge_recursive](http://www.php.net/manual/en/function.array-merge-recursive.php)或[array_replace_recursive](http:// www。 php.net/manual/en/function.array-replace-recursive.php)來獲得期望的結果? – Tom

+0

我不想讓PHP跟我說話。我只是想與PHP「交談」,但我不知道如何去做。 – cooper

+0

看看這裏:http://php.net/manual/en/function.array.php當然,你可以找到一些東西讓你更容易。 PHP通常爲函數使用有意義的名稱 – Mojtaba

回答

3

你可以嘗試array_replace_recursive功能:

array_replace_recursive($a, $b); 

輸出看起來像:

Array 
(
    [1] => Array 
     (
      [-1] => Array 
       (
        [-1] => a: 1 -1 -1 
        [0] => a: 1 -1 0 
        [1] => a: 1 -1 1 
       ) 
      [0] => Array 
       (
        [-1] => a: 1 0 -1 
        [0] => a: 1 0 0 
        [1] => a: 1 0 1 
       ) 
      [1] => Array 
       (
        [-1] => b: 1 1 -1 
        [0] => b: 1 1 0 
        [1] => b: 1 1 1 
       ) 
      [2] => Array 
       (
        [-1] => b: 1 2 -1 
        [0] => b: 1 2 0 
        [1] => b: 1 2 1 
       ) 
      [3] => Array 
       (
        [-1] => b: 1 3 -1 
        [0] => b: 1 3 0 
        [1] => b: 1 3 1 
       ) 
     ) 
) 

這將取代任何條目與在$b值匹配的密鑰,因此只要仔細檢查,如果這是你想要的結果(否則反向$a$b)。

+0

完美的湯姆。這是我一直在尋找的。非常感謝! – cooper

+0

沒問題。祝您的項目好運。 – Tom