php 合并2个阵列:不要改变索引,并在间隙中按顺序添加第二个值

kulphzqa  于 2023-03-16  发布在  PHP
关注(0)|答案(3)|浏览(110)

我有两个数组,我不想改变第一个数组的索引,第二个数组,按顺序添加到缺失索引的空白处:

$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
rdlzhqv9

rdlzhqv91#

循环$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

nzk0hqpo

nzk0hqpo2#

看起来不像是一个简单的合并。你可以试着在第二个数组中运行一个循环,然后慢慢地把元素添加到第一个数组中适合它们的地方

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

    ksort($a);

    return $a;
}
mo49yndu

mo49yndu3#

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

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

echo print_r(new_array);

希望会有帮助

相关问题