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と空文字の違い