合并 2 个数组:不要更改索引并在间隙中按顺序添加第二个值

Merge 2 arrays: don't change indexes and add the 2nd values in order in the gaps

我有两个数组。我希望我不更改第一个索引,而第二个索引按顺序添加到缺失索引的空白处:

$a = array(
     0 => 9,
     2 => 13
     );

$b = array(
     1 => 10,
     2 => 11,
     3 => 12,
     4 => 1
     );

我想要这个结果:

$ab = array(
      0 => 9, 
      1 => 10, 
      2 => 13, 
      3 => 11, 
      4 => 12, 
      5 => 1
      );

我试过这个:

$ab = $a+$b;    // Keeps indexes, but removes key 2 from array $ b
$ab = array_merge($a, $b);  // Change indexes
$ab = array_unique(array_merge($a,$b));     // Change indexes
$ab = array_merge($a, array_diff($b, $a));  // Change indexes

看起来不像是简单的合并。您或许可以尝试 运行 循环遍历第二个数组,然后慢慢地将元素添加到第一个数组适合的位置

function mergeArrays($a, $b)
{
    foreach ($b as $i => $v) {
        while (array_key_exists($i, $a)) {
            $i++;
        }
        $a[$i] = $v;
    }

    ksort($a);

    return $a;
}
foreach ($a as $k => $v ) {
  $new_array[$k] = $v ;
}

foreach ($b as $k => $v ) {
  $new_array[$k] = $v ;
}

echo print_r(new_array);

希望这个用智能手机制作的脚本能奏效

遍历 $b,将元素复制到 $a。但如果索引已经存在,则增加调整以获得新索引。

function mergeArrays($a, $b) {
    $adjust = 0;
    foreach ($b as $i => $val) {
        while (isset($a[$i + $adjust])) {
            $adjust++;
        }
        $a[$i + $adjust] = $val;
    }
    ksort($a); // Put in order by new indexes
    return $a;
}

DEMO