PHPの配列の特定要素を削除するunset()を使う場合の注意点

PHPで配列の中から特定の要素を削除する方法としてunsetが一番ポピュラーでしょう。

ただ、unsetを使って要素を削除する場合はちょっとした注意点があります。

それはインデックスが詰められないってことです。

大した問題でもないですが、一応解決策をメモ程度に残しておこうと思います。

目次

PHPの配列の特定要素を削除するunset()を使う場合の注意点

もう一度おさらいですが、unsetで配列から特定の要素を削除するとインデックスが詰められない問題があります。

もちろんこれはPHPの仕様であり、”問題”と認識することは間違いです。

でも、あえて”問題”と言うのは単純に僕が使っててミスったからです(笑)

優秀な人だとそんなミス無いのかもしれないですが、僕は凡人なので!

 

unset()の使い方も兼ねて実際に削除してみましょう。

$ary = array("東京", "大阪", "北海道", "沖縄");
unset($ary[2]);
print_r($ary);

これで結果が以下のようになります。

Array
(
    [0] => 東京
    [1] => 大阪
    [3] => 沖縄
)

インデックスが2の北海道が削除されました。

削除されてインデックスが抜けてしまいました。

 

この状態が気持ち悪いと思うのは僕だけかな?

ちなみに連想配列の場合は unset で要素を削除しても、元々キーは連番では無く文字列なので特に問題はありません。

インデックスが抜けてしまうのを詰めて連番にする方法を次に解説します。

unset()を使う場合の問題点の解決策

$ary = array("東京", "大阪", "北海道", "沖縄");
unset($ary[2]);
$ary = array_values($ary);

print_r($ary);

print_rの結果は以下のようになります。

Array
(
    [0] => 東京
    [1] => 大阪
    [2] => 沖縄
)

きれいにインデックスが詰められました。

 

上記コードのように array_values を使うとインデックスが整理されます。

ただし、「戻り値の配列が」です。

引数で渡したものは参照渡しではないので元のままです。

しっかり戻り値を受け取って使ってください。

まとめ

今回は unset() を使って配列の中の特定の要素を削除した場合にインデックスを整理する方法をご紹介しました。

この方法は連番のインデックスの間に空きが出来た場合に連番を詰める方法です。

なので文字列をキーにする連想配列には関係ありません。

 

配列のインデックスを整理するには array_values() を使います。

使い方は簡単で引数に unset() で連番が崩れた配列をセットし、戻り値として整理された配列を受け取ります。

この記事を書いた人

ライターのプロフィールが入ります。このライター情報を入れたくない場合は管理画面の ユーザー > あなたのプロフィールの「プロフィール情報」を未入力にすれば表示されません。逆に「プロフィール情報」を入力することでライター情報を表示できます。

コメント

コメントする

CAPTCHA


目次
閉じる