PHP数组合并时空值优先级较低

6

我的目标是合并两个不同的数组。

我有表格“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 有两个 key2 索引? - roullie
1
!array_key_exists || empty 是无意义的。使用其中任何一个都可以,这取决于您是否对与 false 的比较感兴趣。同时使用两者与仅使用 empty 相同。 - deceze
@roullie,谢谢,这是一个打字错误。 - Bast
@deceze,如果我执行“empty($a[$key])”,而该键不存在,它会提供PHP警告吗? - Bast
不会的,这就是empty的意义所在。PHP的isset和empty的权威指南 - deceze
@deceze,感谢您提供的信息。我没有记住这一点,给您的答案加上一个赞。 - Bast
2个回答

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,非常感谢。这(几乎)是我正在寻找的内容。“几乎”是因为我最初想保留"$a"中如果"$b"中不存在该键的空值。但这已经比foreach好多了;) - Bast

4

只需使用array_filter()函数过滤$a数组中的空值。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接