2015-04-22 147 views
0

我們有範圍的數組中$r插入在數組的數組的位置x數組

$r = array(array(3,5), array(36,54)); 

我們希望新的範圍添加到我們的範圍:

$n = array(11, 19); 

我們還想要排序$r,所以新範圍應插入位置1。如果我們使用array_splice結果將是具有添加了兩個新的元素1119

array_splice($r, 1, 0, $n); 
// output: array(array(3,5), 11, 19, array(36,54)) 

我們怎樣才能取得預期的效果,如下圖所示?

// output: array(array(3,5), array(11,19), array(36,54)) 
+0

你嘗試過加入另一個層面$ N? $ n =數組(array(11,19))和拼接? – MuppetGrinder

回答

3

你可以用在另一個數組與一系列新的數組:

array_splice($r, 1, 0, array($n)); 

輸出:

array(3) { 
    [0]=> 
    array(2) { 
    [0]=> 
    int(3) 
    [1]=> 
    int(5) 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    int(11) 
    [1]=> 
    int(19) 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    int(36) 
    [1]=> 
    int(54) 
} 

Example

2

這可能是更容易,你的想法。讀array_splice's documentation,你會發現$replacement參數是一個數組,並且應該包含應該插入到數組中的所有元素。

因此,考慮下面的代碼:

array_splice($r, 1, 0, array(11, 19)); 

這並不array(11, 19)爲一個元件插入到所述陣列,但每個1119和作爲兩個元件。

你可能想要做的是這樣的:

array_splice($r, 1, 0, array(array(11, 19))); 

或者,在具體的例子:

array_splice($r, 1, 0, array($n)); 

或者,你可以簡單地追加,然後完全重新排序數組(可能效率不高,但對於小數據集有點容易):

$r[] = $n; 
usort($r, function($a, $b) { return $a[0] - $b[0]; }); 
0

如果你只是簡單地將它們按照範圍中的第一個值的順序排列,然後您可以執行以下操作。

$r = array(array(3,5), array(36,54)); 
$r[] = array(11,19); 
print_r($r); 
sort($r); 
print_r($r); 

結果:

沒有排序:

Array 
(
    [0] => Array 
     (
      [0] => 3 
      [1] => 5 
     ) 

    [1] => Array 
     (
      [0] => 36 
      [1] => 54 
     ) 

    [2] => Array 
     (
      [0] => 11 
      [1] => 19 
     ) 

) 

排序:

Array 
(
    [0] => Array 
     (
      [0] => 3 
      [1] => 5 
     ) 

    [1] => Array 
     (
      [0] => 11 
      [1] => 19 
     ) 

    [2] => Array 
     (
      [0] => 36 
      [1] => 54 
     ) 

) 

view this answer to another question that explains why sort() works on multidimensional arrays