質問: array("red", "green", "blue", "yellow"); array_splice($input, 3, 0, "purple"); // ここでは $input は array("red", "green","blue", "purple", "yellow"); となる ``` ``` length にゼロを指定した場合は、どの要素も削除しません。 ``` ("red", "green", "blue", "yellow")で、インデックス番号3の値は"yellow"ですが この場合のイメージとしては、 3番目の値を削除しないが代替する=3番目の値を挿入するために、現在3番目にある"yellow"に後ろに下がってもらう。このような感覚で良いでしょうか? 教えていただければ幸いです。
回答: (1) > > 配列$inputのインデックス番号1("green")から-1の長さ分を削除? > > > ここの認識が違います。 第三引数は「配列の一番末尾(つまり"yellow")」を基準に計算されます。 日本語で書くと、`array_splice($input, 1, -1)`は、 $input の先頭(”red”)から 1 進んだ箇所から、末尾(つまり"yellow")から 1 戻った箇所まで(つまり"green", "blue")を削除します。 (2) > > 末尾からの数え方は配列のように0番目からではなく、-1番目が末尾の値と考えて良いのですか? > > > はい。正しいです。 (3) > > 3番目の値を削除しないが代替する=3番目の値を挿入するために、現在3番目にある"yellow"に後ろに下がってもらう。このような感覚で良いでしょうか? > > > 変に読み替えないで、マニュアルに記載の通り > > offset および length で何も削除しないと指定した場合、配列 replacement の要素は offset で指定された位置に挿入されます。 > > > で理解したほうが良いです。 位置の指定の仕方は、下記のようにイメージすると理解しやすいと思います。 ``` |"red"|"green"|"blue"|"yellow"| 0 1 2 3 4 -4 -3 -2 -1 0 ```