2015-12-18 18 views
6

私の目標は2つの異なる配列をマージすることです。PHP array_merge空の値は常に優先順位が低く

テーブル「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); 

以下のような何かをしないで1つの関数にこれを行う方法があります:ここで

は私のコードですか?あなたが array_replacearray_filter

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

を使用することができます

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 ||空 'はナンセンスです。どちらかを使うと、 'false'との比較に興味があるかどうかによって、うまくいくでしょう。両方を一緒に使用することは、単に「空」を使用することと同じです。 – deceze

+0

@roullie、ありがとう、これはtypo – Bast

答えて

5

結果は次のようになります。''値で任意の項目を削除します

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、ありがとう。これは(ほとんど)私が探していたものです。私が最初に "$ a"からの空の値を "$ b"に存在しないならば、元のままにしたかったからです。しかしこれはすでにforeachよりはるかに優れている;) – Bast

2

だけarray_filter()$a

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

ありがとう、また正解:) – Bast

関連する問題