2017-08-14 48 views
0

我有两个数组。我想,我不会改变的第一个,第二个和的指标,是由为了在缺少指标的差距补充说:合并2个数组:不要更改索引并在间隙中按顺序添加第2个值

$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 
+0

否,it's不可能的,我已简化了的例子,但$ B具有最小五个值的和$一个0至5倍的值。 – nature

回答

1

遍历$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

+0

谢谢Barmar!这工作完美。后来我意识到我必须循环和逐个添加值,就像你和Georaldc所说的一样。 – nature

1

似乎不是一个简单的合并。你或许可以尝试通过你的第二个阵列运行的循环,慢慢地在他们适合

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

    ksort($a); 

    return $a; 
} 
+0

谢谢georaldc!这工作正常。 – nature

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

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

echo print_r(new_array); 

希望地将元素添加到第一阵列这个脚本的智能手机制造将工作

+1

我不认为这会奏效。 b的项目2将覆盖a的项目2.而b的其余部分将具有错误的密钥编号。 – Andreas

+0

@andreas,这种方法很好,因为您可以根据需要进行扩展。例如:你可以使用相同的键值和/平均值/任何值。 – augusto

+0

是不是那种明显?你可以用你喜欢的任何代码扩展任何代码。无论哪种方式,IT不会为OP想要的预期用途工作。试试看,你会看到。 – Andreas