2017-08-14 53 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