【问题标题】:PHP - merge values of arrays where previous array has missing or present but empty valuesPHP - 合并先前数组缺失或存在但为空值的数组值
【发布时间】:2014-08-01 04:36:00
【问题描述】:

如何合并两个数组:

$arr1 = [1 => 'a', 2 => '', 3 => 'c'];
$arr2 = [1 => 'd', 2 => 'e', 3 => 'f'];

然后得到:

[1 => 'a', 2 => 'e', 3 => 'c'];

我已经成功地做到了:

$arr1 = [1 => 'a',           3 => 'c'];
$arr2 = [1 => 'd', 2 => 'e', 3 => 'f'];

$arr1 + $arr2;

但是,有时 $arr1 还包含值 2 => '',它为空但存在,在这种情况下,键 2 不会被 $arr2 覆盖。

【问题讨论】:

  • array_merge
  • 为什么不array_filter($arr1) + array_filter($arr2);
  • 如果存在空值,我希望保留它们。无值、空值、非空值 - 我希望所有这些都出现在最终数组中。
  • 您想要的结果:[1 => 'a', 2 => 'e', 3 => 'c']; 似乎与您的上述说法不符。看起来你想用 $arr1 上的空值填充键,而不是合并数组。这接近你预期的结果吗? --> array('a', '', 'c', 'd', 'e', 'f');
  • @Daan 谢谢!我意识到 array_merge 完成了这项工作(只是从另一边)。

标签: php arrays merge


【解决方案1】:

使用

  $arr1 = array(1 => 'a', 2 => '', 3 => 'c');
  $arr2 = array(1 => 'd', 2 => 'e', 3 => 'f');
  $arr3 = array_filter($arr1) + array_filter($arr2);
  print_r($arr3);

【讨论】:

  • 我想保留空值并用非空值(如果存在)覆盖。
【解决方案2】:
$arr1 = array("a","","c");
$arr2 = array("d","e","f");

$i = 0;
foreach ($arr1 as $value) {
  if($arr1[$i] == "")
           $arr1[$i] = $arr2[$i];
  $i++;
}

print_r($arr1);

这里矩阵的维数和元素个数必须相等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2019-02-20
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多