2012-11-11 40 views
0

我想了解PHP數組方法,所以Id更喜歡使用數組方法來解決此問題。用於使用不同的數組值替換內部數組值的方法具有相同的密鑰

這裏是我的數據:

$dataA => 
    array 
     0 => 
     array 
      'type' => string 'name' (length=4) 
      'key' => string 'keywords' (length=8) 
      'content' => string 'keywordA' (length=14) 

$dataB => 
    array 
     1 => 
     array 
      'type' => string 'name' (length=4) 
      'key' => string 'keywords' (length=8) 
      'content' => string 'keywordB' (length=14) 

我想要做的是有兩個數組合並,並最終content關鍵是:

$finalData => 
    array 
     0 => 
     array 
      'type' => string 'name' (length=4) 
      'key' => string 'keywords' (length=8) 
      'content' => string 'keywordB' (length=14) 
           ^-- notice here that the content has changed based on the fact that 'key' for both is 'keywords' 

正如你所看到的,最終的內容值來自$ dataB。

+0

是否陣列a或b包含具有相同'key'多個元素?你需要數字指標在任何地方保存嗎? –

+0

現在來看看。我之前投票結束這個問題,因爲它沒有正確的措辭,所以如果它沒有對不起。 – jkushner

+0

該編輯不回答我的任何問題。我提供的解決方案假定唯一的鍵值並且不需要數字索引。 –

回答

0

遞歸更換你想要做

$finalData = array_replace_recursive($dataA, $dataB); 

對於這個特殊的例子是什麼,還加上運營商將做你想要什麼:

$finalData = $dataB + $dataA; 

但你必須指定不同的順序參數。

沒有這樣的內置功能。你需要一些東西來替換一個特定的鍵,只有當其他東西相等時,它纔是第二個數組中的等價物,而且在零索引中有關聯數組,並且只需要在第二級中比較項。如果你在描述之後再看它,你可能會注意到這不是每個人都需要的通用功能,所以它不包含在標準功能集中。

假設key值是每個陣列唯一的,這裏是沒有可見的循環溶液:

$getKey = function($item){ return $item['key']; }; 
$keysA = array_map($getKey, $dataA); 
$keysB = array_map($getKey, $dataB); 
$finalData = array_values(array_replace_recursive(
    array_combine($keysA, $dataA), 
    array_combine($keysB, $dataB) 
)); 
+0

我試過array_replace_recursive,它只是將兩個數組合成一個包含兩個數組值的數組 – jkushner

+0

您是如何嘗試的? http://3v4l.org/IUoOJ –

+0

這些索引不是一樣的,所以把它們合併起來。我需要尋找匹配的鍵索引(實際的鍵稱爲鍵,在這個例子中是關鍵字),然後更新值的內容,因爲它的不同 – jkushner

0

複製$dataB,然後循環$dataA。如果在$dataB中找不到$dataA的值,請將其添加到您的副本中。

相關問題