array_splice
マニュアル
http://www.php.net/manual/ja/function.array-splice.php
Perlのspliceと同じように使ったら間違っていたのでメモ。
array_spliceは配列の値を削除したり挿入したり置き換えたり
いろんなことができる関数です。
<?php $array1 = range(0, 9); array_splice($array1, 5); // 添字5から先を削除 print_r($array1); /* Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 ) */ $array2 = range(0, 9); array_splice($array2, 4, 2); // 添字4から2個削除 print_r($array2); /* Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 6 [5] => 7 [6] => 8 [7] => 9 ) */ $array3 = range(0, 9); array_splice($array3, 2, 0, 100); // 添字2の位置に100を挿入 print_r($array3); /* Array ( [0] => 0 [1] => 1 [2] => 100 [3] => 2 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 7 [9] => 8 [10] => 9 ) */ $array4 = range(0, 9); array_splice($array4, 2, 1, 100); // 添字2の値を100に置き換える print_r($array4); /* Array ( [0] => 0 [1] => 1 [2] => 100 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 ) */ $array5 = range(0, 9); array_splice($array5, 1, 3, 100); // 添字1から3個削除し、100を挿入する print_r($array5); /* Array ( [0] => 0 [1] => 100 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 ) */
多次元の配列を扱うときは少し注意が必要で、、、
<?php $array = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9), ); array_splice($array, 1, 0, array(101, 102, 103)); print_r($array);
こんな感じに書くと出力は
Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => 101 [2] => 102 [3] => 103 [4] => Array ( [0] => 4 [1] => 5 [2] => 6 ) [5] => Array ( [0] => 7 [1] => 8 [2] => 9 ) )
こうなってしまいます。
array_spliceは複数の値を挿入するとき
引数を増やすのではなくて第4引数に挿入したい値の配列を渡してやります。
なのでこの場合は
<?php $array = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9), ); array_splice($array, 1, 0, array(array(101, 102, 103))); print_r($array);
とするとうまくいくわけです。
array_pushとかarray_unshiftは引数を増やすタイプなのに
なんでarray_spliceだけは違うのだろうか、、、