2015-12-18 41 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