PHPでは、さまざまな方法で配列を削除することができます。
この記事では、
・array_spliceで配列を要素を削除する方法
・unsetで配列の要素を削除する方法
という基本的な配列の削除方法から、
・array_diffで差分を残して削除する方法
・array_shiftで先頭の要素を削除する方法
・array_popで配列末尾を削除する方法
などの応用的な使い方に関しても解説していきます。
今回はそんな配列のさまざまな削除方法についてわかりやすく解説します!
array_spliceで配列を要素を削除する
array_spliceとは
array_splice関数は、指定した要素を削除するときに使用します。
書き方:
array_splice($削除対象配列名, 削除対象位置 [, 削除数])
引数:
第一引数には削除対象の配列を指定します。
第二引数には削除対象の位置を数値で指定します。
第三引数の削除数は、指定した値のみ要素を残して、後に続く要素をいくつ残すか指定します。
単純に第二引数で指定した数値のあとの要素数をいくつ削除するか指定するものではありません。
返り値:
削除後の配列を返します。
※array_splice関数は、削除後の配列の要素数が自動的に詰められます。後述するunset関数は削除後の配列の要素数が詰められません。
array_spliceの使い方
以下にarray_splice関数を使用した、配列の要素を削除するサンプルを紹介します。
サンプルプログラム
$fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //配列の要素1を削除 $fruits = array_splice($fruits, 1); print_r($fruits);
実行結果:
Array ( [0] => orange [1] => melon [2] => banana [3] => pineapple )
array_splice関数を使用すれば、配列から指定した要素が削除できて、要素番号が詰められることがわかりますね!
unsetで配列の要素を削除する
unsetとは
unset関数は、指定した要素の値を削除します。
書き方:
unset($配列[要素番号] [, $配列[要素番号], …)
引数:
1つまたは複数の変数や配列の要素番号を指定します。
返り値:
unset関数には返り値はありません。
unsetの使い方
以下にunset関数を使用して配列の要素を指定して削除するサンプルを紹介します。
サンプルプログラム
$fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //配列の要素1を削除 unset($fruits[2]); print_r($fruits);
実行結果:
Array ( [0] => apple [1] => orange [3] => banana [4] => pineapple )
unset関数を使用すれば、配列から指定した要素が削除できますが、先述したとおりarray_splice関数のように削除後に要素番号は詰められません。
そのため、要素数を詰めたい場合は後述する「配列の番号を詰める方法」を参照してください。
unsetでまとめて削除する
unset関数を使用すれば、ループで配列全体の値を取得し、特定の条件の要素のみ削除するときに便利です。
以下に配列の要素が’orange’、’melon’の場合は、値を削除する処理を記述します。
サンプルプログラム
$fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; for ($i = 0 ; $i < count($fruits); $i++){ //指定した条件の文字列なら配列を削除 if ($fruits[$i] == 'orange' or $fruits[$i] == 'melon'){ unset($fruits[$i]); } } print_r($fruits);
実行結果:
Array ( [0] => apple [3] => banana [4] => pineapple )
配列の番号を詰める方法
unset関数などで、特定の要素の配列を削除しても要素番号自体が変更されることはありません。
そのため、array_values関数を使用して、削除した配列の要素分番号を詰める処理が必要な場合もあります。
array_values関数は、配列の削除処理後に以下のように記述します。
書き方:
array array_values($配列)
以下にunsetで配列の要素を削除したあとに、array_values関数で配列の番号を詰めるサンプルを紹介します。
サンプルプログラム
$fruits1 = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //配列の要素1を削除 unset($fruits1[2]); $fruits2 = array_values($fruits1); print_r($fruits2);
実行結果:
Array ( [0] => apple [1] => orange [2] => banana [3] => pineapple )
array_diffで差分を残して削除する
array_diffとは
array_diff関数は、対象の配列1を他の配列2と比較し、配列1の値で他の配列に存在しない値以外を削除します。
書き方:
array_diff( 比較元の配列 , 比較対象の配列1 [, 比較対象の配列2... ] )
引数:
第一引数に比較元の配列を指定します。
第一引数以降は、比較対象の配列を1つまたは複数指定します。
返り値:
比較対象の配列に含まれない要素を配列で返します。
array_diffの使い方
以下にarray_diff関数を使用して、配列の要素を比較して差分のみ残すサンプルを記述します。
サンプルプログラム
$fruits1 = ['apple', 'orange', 'melon', 'banana', 'pineapple']; $fruits2 = ['apple', 'orange', 'melon']; //array_diffを使用して差分を取得する $fruits_diff = array_diff($fruits1, $fruits2); print_r($fruits_diff);
実行結果:
Array ( [3] => banana [4] => pineapple )
サンプルでは配列fruits1とfruits2を作成し、array_diff関数で配列同士を比較して、一致した値がある場合は、削除を実施しています。
配列fruits1で設定した’banana’、’pineapple’は、fruits2には存在しないので削除されません。
array_shiftで先頭の要素を削除する
array_shiftとは
array_shift関数は先頭の要素を取り出す関数で、取り出された配列は先頭の要素が削除されます。
書き方:
array_shift( $配列 )
引数:
対象の配列を指定します。
返り値:
先頭の要素を取り出した値を返します。
引数の配列が空の場合や配列以外の変数の場合は、NULLを返します。
array_shiftの使い方
以下にarray_shift関数を使用して、配列の先頭の要素を削除するサンプルを記述します。
サンプルプログラム
$fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //先頭の要素を削除する array_shift($fruits); print_r($fruits);
実行結果:
Array ( [0] => orange [1] => melon [2] => banana [3] => pineapple )
array_popで配列末尾を削除する
array_popとは
array_pop関数は、引数に指定した配列の末尾の要素を削除します。
書き方:
array_pop($配列)
引数:
対象の配列を指定します。
返り値:
先頭の最後の要素を取り出した値を返します。
引数の配列が空の場合や配列以外の変数の場合は、NULLを返します。
array_popの使い方
以下にarray_pop関数を使用して、配列の末尾を削除する処理を記述します。
$fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; //配列末尾の値を削除する array_pop($fruits); print_r($fruits);
実行結果:
Array ( [0] => apple [1] => orange [2] => melon [3] => banana )
array関数についてもっと詳しく知りたい方へ
配列を操作するさまざまな関数の使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
・array_sum関数の使い方
・array_unique関数の使い方
・array_values関数の使い方
・array_keys関数の使い方
・array_filter関数の使い方
・array_map関数の使い方
・array_push関数の使い方
・array_key_exists関数の使い方
・array_pad関数の使い方
・implode関数の使い方
・配列の削除方法
・配列の検索方法
・よく使用する配列操作
まとめ
ここでは配列を削除するさまざまな方法として、
・array_spliceで配列を要素を削除する方法
・unsetで配列の要素を削除する方法
・array_diffで差分を残して削除する方法
・array_shiftで先頭の要素を削除する方法
・array_popで配列末尾を削除する方法
について、解説しました。
配列を扱った処理は、実際の開発でもよく使用しますので、この機会にぜひ覚えておきましょう。
もし、配列の削除方法を忘れてしまったら、この記事を思い出してくださいね!