【PHP】配列を空にする方法|[]・unset・array_spliceの違いと使い分け

PHPで「配列の中身を全部消したい」というとき、方法はいくつかあります。多くの場合は $array = [] で十分ですが、変数ごと消すのか・中身だけ消すのかで適切な方法が変わります。この記事では代表的な方法と、その違い・使い分けを解説します。

この記事の結論:配列を空にする最も簡単で標準的な方法は $array = []; です。変数自体を消すなら unset($array)、中身だけ消して変数は残すなら array_splice($array, 0) を使います。
スポンサーリンク

$array = [] で再初期化する(推奨)

もっとも簡単で標準的なのが、空の配列を代入し直す方法です。[]array() の短縮記法で、現在はこちらが主流です。

空配列を代入
<?php
$array = [1, 2, 3];
$array = []; // 空にする(array() と同じ意味)

var_dump($array); // array(0) {}

$array = array() で再初期化する

古い書き方ですが array() でも同じく空にできます。結果は [] と同一です。新しいコードでは [] を使えば十分です。

array()で再初期化
<?php
$array = [1, 2, 3];
$array = array(); // [] と同じ

unset()で変数ごと削除する

unset()変数そのものを削除します。「空の配列にする」のではなく「変数を消す」点に注意してください。削除後にその変数を使うと未定義変数の警告が出ます。

unsetで変数を削除
<?php
$array = [1, 2, 3];
unset($array); // $array 自体が無くなる

// echo count($array); // Warning: Undefined variable $array
「もう使わない」配列の後始末なら unset()「中身を空にして使い続ける」なら $array = [] と覚えると分かりやすいです。未定義変数の警告についてはUndefined variable の解決方法を参照してください。

array_splice()で中身だけ削除する

array_splice($array, 0) は、変数は残したまま要素を全削除します。配列を直接書き換える(破壊的)関数で、結果として空配列になります。

array_spliceで全要素削除
<?php
$array = [1, 2, 3];
array_splice($array, 0); // 全要素を削除

var_dump($array); // array(0) {}

foreachでキーを1つずつ削除する

条件付きで一部だけ消したい場合は、foreach でキーを指定して unset() します。全削除にも使えますが、全部消すだけなら $array = [] のほうが簡潔です。

foreachで条件付き削除
<?php
$array = [1, 2, 3, 4];

foreach ($array as $key => $value) {
    if ($value % 2 === 0) {
        unset($array[$key]); // 偶数だけ削除
    }
}
var_dump($array); // [0 => 1, 2 => 3](キーは振り直されない)
unset($array[$key]) で要素を消すとキーは振り直されません(0,2 のように歯抜けになります)。連番に直したいときはarray_values() を通してください。

方法の使い分け

方法 結果 向いている場面
$array = [] 空の配列になる 基本。中身を空にして使い続ける
unset($array) 変数ごと消える もう使わない配列の後始末
array_splice($array, 0) 中身が空になる 配列を直接書き換えたい
foreach + unset 指定要素を削除 条件付きで一部だけ消す

よくある質問(FAQ)

Q一番簡単に配列を空にする方法は?
A$array = []; です。空の配列を代入し直すだけで、最も簡潔・標準的です。array() でも同じ結果になります。
Qunsetと$array = []の違いは?
A$array = []空の配列にする(変数は残る)、unset($array)変数そのものを消す(以降使うと警告)です。配列を使い続けるなら []、完全に破棄するなら unset() です。
Q一部の要素だけ削除したいです。
Aforeach で条件に合うキーを unset($array[$key]) します。ただしキーは振り直されないため、連番に戻したいときはarray_values() を使ってください。
Qarray_spliceと$array = []はどちらが良いですか?
A通常は $array = [] で十分です。array_splice($array, 0) は配列を直接書き換える用途で使いますが、単に全部空にするだけなら [] のほうがシンプルで分かりやすいです。

まとめ

PHPで配列を空にする方法を整理します。

  • 基本は $array = []array() も同じ)
  • 変数ごと消すなら unset($array)(以降の参照は警告)
  • 中身だけ消して変数を残すなら array_splice($array, 0)
  • 条件付き削除は foreach + unset(キーは振り直されない)
  • 歯抜けキーを連番に戻すなら array_values()

関連として、array_valuesで値を取得・キーを振り直す方法配列の要素数をカウントする方法配列に要素を追加する方法もあわせて読むと、PHPの配列操作に強くなれます。