今回はPHPでarray_splice関数を使って配列の途中の要素を追加、置換、削除する方法について解説します。
配列の先頭や末尾の要素への処理は複数の方法があるのですが、途中の要素への処理は限られます。PHPではarray_splice関数を使うことで配列の途中の要素を追加、置換、削除することが可能になります。しっかり学んでプログラム開発に役立ててください。
目次
array_splice関数による配列への要素追加
まず配列の途中に要素を1つ追加する方法です。
以下は5つの要素を持つ配列にarray_splice関数を使って要素を追加する例です。第二引数の2は要素番号2(つまり3番目)に追加することを意味しています。第三引数は単純に追加の場合は0固定です。第四引数は追加したい要素ですね。
1 2 3 |
$array = array("鈴木", "佐藤", "渡辺", "池田", "田中"); array_splice( $array, 2, 0, "山田"); print_r($array); |
結果はご覧の通りです。3番目に要素が追加されました。
1 2 3 4 5 6 7 8 9 |
Array ( [0] => 鈴木 [1] => 佐藤 [2] => 山田 [3] => 渡辺 [4] => 池田 [5] => 田中 ) |
array_splice関数の便利な点として配列を追加できることです。これによって一度に複数の要素を追加できます。
1 2 3 |
$array = array("鈴木", "佐藤", "田中"); array_splice( $array, 2, 0, array("山田", "渡辺", "池田")); print_r($array); |
結果は以下の通り。3番目から3つの要素が追加されていることがわかるかと思います。
1 2 3 4 5 6 7 8 9 |
Array ( [0] => 鈴木 [1] => 佐藤 [2] => 山田 [3] => 渡辺 [4] => 池田 [5] => 田中 ) |
array_splice関数による配列への要素置換
今度は配列の中の要素を置換する方法について解説します。
要素追加と同じくarray_splice関数を使いますが、第三引数を「1」にします。これにより「インデックス2(3番目)から1個を”山田”に置き換える」という意味になります。(先程の追加の場合は「インデックス2(3番目)から0個を”山田”に置き換える」という意味で置き換えが0個だったために追加となったわけですね。)
1 2 3 |
$array = array("鈴木", "佐藤", "渡辺", "池田", "田中"); array_splice( $array, 2, 1, "山田"); print_r($array); |
結果は以下の通り3番目の”渡辺”が”山田”に置き換えられました。
1 2 3 4 5 6 7 8 |
Array ( [0] => 鈴木 [1] => 佐藤 [2] => 山田 [3] => 池田 [4] => 田中 ) |
さて、もし第三引数を「1」ではなく「2」とした場合はどうなるのでしょうか。2個を置き換えるという意味だから”渡辺”と”池田”がどちらも”山田”になるのでしょうか。
1 2 3 |
$array = array("鈴木", "佐藤", "渡辺", "池田", "田中"); array_splice( $array, 2, 2, "山田"); print_r($array); |
こちらが結果です。”池田”が消えてしまいましたね。これは消えたのではなく、「”渡辺”と”池田”という2つの要素を、”山田”という1つの要素に置き換える」という意味だったのです。このあたりの挙動を把握しておかないと思わぬバグを生み出しますのでよく覚えておいてください。
1 2 3 4 5 6 7 |
Array ( [0] => 鈴木 [1] => 佐藤 [2] => 山田 [3] => 田中 ) |
次に配列の置き換えの例についても挙げておきます。
第四引数に配列を指定しました。
1 2 3 |
$array = array("鈴木", "佐藤", "渡辺", "田中"); array_splice( $array, 2, 1, array("山田", "池田", "石川")); print_r($array); |
結果はご覧のとおりです。第三引数を1としていたので「”渡辺”という1つの要素を、配列に置き換える」という意味なので結果は以下のようになります。なので”田中”は残ります。
1 2 3 4 5 6 7 8 9 |
Array ( [0] => 鈴木 [1] => 佐藤 [2] => 山田 [3] => 池田 [4] => 石川 [5] => 田中 ) |
array_splice関数による配列への要素削除
今度はarray_splice関数による要素の削除の方法について説明します。
今までの説明からarray_splice関数の実態は「置き換え」だということがわかったかと思います。それでは何と置き換えることで要素削除が実現できるのでしょうか。
以下が要素削除の例です。第四引数にnullを指定することで削除することができます。「インデックス2(3番目)から1個をnullに置き換える」という意味です。
1 2 3 |
$array = array("鈴木", "佐藤", "渡辺", "池田", "田中"); array_splice( $array, 2, 1, null); print_r($array); |
結果はご覧お通り削除することができました。
1 2 3 4 5 6 7 |
Array ( [0] => 鈴木 [1] => 佐藤 [2] => 池田 [3] => 田中 ) |
同じ要領で第三引数を2にすることで「インデックス2(3番目)から2個をnullに置き換える」という意味になります。
1 2 3 |
$array = array("鈴木", "佐藤", "渡辺", "池田", "田中"); array_splice( $array, 2, 2, null); print_r($array); |
以下の通り要素2つを削除することができました。
1 2 3 4 5 6 |
Array ( [0] => 鈴木 [1] => 佐藤 [2] => 田中 ) |
連想配列で使用する上での注意点
最後にarray_splice関数を連想配列で使用する上での注意点を説明したいと思います。
以下は連想配列の3番めに要素を追加するためのプログラムです。
1 2 3 |
$array = array("鈴木"=>38, "佐藤"=>22, "渡辺"=>45, "池田"=>49, "田中"=>56); array_splice( $array, 2, 0, array("山田"=>33)); print_r($array); |
出力結果はご覧のとおりです。追加されたのは値のみでキーが消えて番号になってしまいました。
1 2 3 4 5 6 7 8 9 |
Array ( [鈴木] => 38 [佐藤] => 22 [0] => 33 [渡辺] => 45 [池田] => 49 [田中] => 56 ) |
残念ながらarray_splice関数の使用上、キーを追加することができません。array_splice関数で連想配列を扱うのはおすすめできませんん。
まとめ
いかがでしょうか。今回はarray_splice関数を使って配列の途中の要素を追加、置換、削除する方法について解説しました。
配列の先頭や最後に追加する場合はarray_push関数やarray_merge関数などいくつか方法はあるのですが、途中に追加や置換となるとarray_splice関数のみとなります。array_splice関数の引数を変えることで追加、置換、削除を可能にできる一方で誤った引数を当ててしまい、意図しない動きをしてしまう危険もあります。しっかり学んでプログラム開発に役立ててください。