PHPの配列から特定の要素を削除する方法です。
unset()を使った場合、一緒にキーも削除されるため、飛び飛びの歯抜けになり、弊害も生まれます。
今回は削除で飛び飛びになってしまったキーを再連番する方法までご紹介します。
配列から要素を削除
unsetで要素を1つだけ削除
|
1 2 3 4 |
$citys = array('神奈川','大阪','福岡'); // unsetで配列の2番目を削除 unset($citys[1]); |
[0]=>”神奈川”,[2]=>”福岡”
unset()で2番目の大阪を削除しました。
キーは0から振られるので、$citys[1]は2番目の要素ですね。
array_spliceで要素を複数削除
|
1 2 3 4 |
$citys = array('神奈川','大阪','福岡'); // array_spliceで2番目以降の値を削除 array_splice($citys, 1); |
[0]=>”神奈川”
上記の例では、array_splice()の第二引数で指定した数字以降が削除されました。
キーは0から振られるので、1は2番目の要素ですね。
array_splice(配列, 開始位置);
以下では削除する個数も指定しています。
|
1 2 3 4 |
$citys = array('神奈川','大阪','福岡'); // array_spliceで最初から2つの値を削除 array_splice($citys, 0, 2); |
[0]=>”福岡”
第二引数で開始位置を、第三引数で削除する要素数を指定できます。
array_splice(配列, 開始位置, 要素数);
上記の例では、0から2個の要素数を削除するコードなので、[0]の神奈川と[1]の大阪が削除されました。
そして福岡には空き番となったキー[0]が振られました。
キーを連番にする必要もないですね。
飛び飛びのキーを連番にする
array_valuesで配列を連番にする
array_values()で飛び飛びになってしまったキーを連番に振り直します。
|
1 2 3 4 |
$citys = array(0=>'神奈川', 2=>'福岡'); // array_valuesで飛び飛びのキーを連番に振り直す $citys = array_values($citys); |
[0]=>”神奈川”,[1]=>”福岡”
キー[1]が空き番だったため、キーが[2]だった福岡が[1]となり、連番になりました。
array_values()は以下のように動作します。
- 指定の配列から全ての値を取り出す
- 取り出した値に「0」から始まる連番(キー)を振る
- それを配列で返す
以上のことから、連想配列では以下のようにキーが連番になってしまうので注意しましょう。
|
1 2 3 4 |
$citys = array('kanagawa'=>'神奈川', 'osaka'=>'大阪', 'fukuoka'=>'福岡'); // 'kanagawa'などのキーが[0]などの連番に振り直される $citys = array_values($citys); |
[0]=>”神奈川”,[1]=>”大阪”, [2]=>”福岡”
キーが[kanagawa]→[0]に変わってしまいました。
ちなみにarray_merge()でも同様に連番にできます。
配列自体を削除する
unset()でキーを指定せずに配列を指定すると、全部削除されます。
|
1 2 3 4 5 6 |
$citys = array('神奈川','大阪','福岡'); // unsetで配列自体を削除 unset($citys); var_dump($citys); |
NULL
上記のように配列自体がなくなりました。
下記のようにnullを格納した場合と同じ動作になります。
|
1 2 3 4 5 6 |
$citys = array('神奈川','大阪','福岡'); // 配列にNULLで上書き $citys = NULL; var_dump($citys); |
NULL
ただ、下記のように配列を初期化した場合は、配列自体は残ります。
|
1 2 3 4 5 6 |
$citys = array('神奈川','大阪','福岡'); // 配列を初期化する(空にする) $citys = array(); var_dump($citys); |
array(0) {}
nullは配列自体が存在しませんが、array(0)は配列自体は存在していますが値が空の状態なので、厳密には別物です。
nullと空文字についてはこちらを参考にしてみてください。
参考:PHPでNULL判定する3パターンとNULLと空文字の違い
