2015-12-18 49 views
6

我的目標是合併2個不同的數組。PHP array_merge空值總是低於prioritar

我有表「a」&「b」。 來自表「a」的數據更優先。

問題:如果一個來自「a」的關鍵字包含一個空值,我想採用表「b」中的一個。

這裏是我的代碼:

<?php 

$a = array('key1'=> "key1 from prioritar", 'my_problem'=> ""); 

$b = array('key1'=> "key1 from LESS prioritar", 'key2'=>"key2 from LESS prioritar", 'my_problem'=> "I REACHED MY GOAL!"); 

$merge = array_merge($b, $a); 

var_dump($merge); 

有沒有辦法做到這一點在一個函數沒有做類似下面?

foreach($b as $key => $value) 
{ 
    if(!array_key_exists($key, $a) || empty($a[$key])) { 
    $a[$key] = $value; 
    } 
} 
+1

你的數組'$ b'有2個'key2'索引? – roullie

+1

'!array_key_exists ||空'是無稽之談。使用任何一個都可以,只要你對'虛假'的比較感興趣。一起使用和使用'empty'一樣。 – deceze

+0

@roullie,謝謝,這是一個輸入錯誤 – Bast

回答

5

您可以使用array_replacearray_filter

$mergedArray = array_replace($b, array_filter($a)); 

其結果將是:

array(3) { 
    ["key1"]=> 
    string(19) "key1 from prioritar" 
    ["key2"]=> 
    string(24) "key2 from LESS prioritar" 
    ["my_problem"]=> 
    string(18) "I REACHED MY GOAL!" 
} 
+2

請注意'array_filter($ a)+ $ b'也可以。 – deceze

+1

@Matei,非常感謝。這(幾乎)是我正在尋找的東西。 「差不多」,因爲如果密鑰不存在於「$ b」中,我最初希望保留「$ a」的空值。但是這已經比foreach好多了;) – Bast

2

只是array_filter()$a將刪除與''價值的任何項目。

$merge = array_merge($b, array_filter($a)); 
+0

謝謝,也正確:) – Bast