[PHP] array_splice()関数の動きを整理する

PHPのarray_splice()関数は、配列操作関数の万能選手。単独で様々な操作が可能です。しかし反面、オプションが多くて挙動が分かりにくい。そこで、基本事項を整理しておきます。

まずは引数と戻り値について。

$inputを参照渡しして、$offsetの位置をスタート地点とし、$lengthぶん進んだ位置までを切り取ります。置換対象の指定があれば、切り取った後で置換対象を挿入します。array_splice()は切り取られた配列を返します。

次に、最もシンプルな使い方。

$dataの中で、最初(0)から指定オフセット(この場合は2)のぶんだけ進んだ位置(2)までをスタート地点とします。$lengthの指定が無い場合、最後まで切り取ります。

$lengthを指定してみると、

インデックス2の地点([2] => 3)から3つ切り取っています。

置換も試してみる。

今度は$lengthに6を指定しているので、インデックス2の地点からスタートして、6個要素を切り取り、インデックス2の地点から置換対象の配列を挿入しています。

次に、$offsetに負の数(-5)を指定してみます。

今度は、配列の最後の地点([8] => 9)から数えて5つ要素を切り取っています。

ここで、$lengthを指定してみると…

最後の地点から数えて5つ目([4] => 5)からスタートし、後ろに向かって3つぶん要素を切り取っています。では、$lengthに負の数を指定すると…

$lengthに負の数を指定した場合は、[4] => 5から前に向かって3つぶん… ではなく、配列の後ろから、|$length|(絶対値)ぶんを残して切り取ります。この場合は-3を指定しているので、配列の後ろから数えて、|-3| = 3つぶん残しています。-2なら最後の2つ、-1なら最後の1つだけが残ります。

$offsetに正の数、$lengthに負の数、というパターンも試しておきます。

インデックス1の地点(1 => 2)を開始地点として、配列の後ろから|-4| = 4つ要素を残しているのが分かります。

理解に時間がかかったのは、$lengthが負の数であるパターンですね。このように、ちょっと関数の挙動を調べたい、っていう状況では、ローカルでもいいですが、インターネット環境があるならllevalがオススメです。利点は、出力が見やすいことと、テスト用のファイルを作らなくても良いところ。

コメントを残す