PHP を使用して配列から要素を削除し、foreach ($array)
その要素が含まれないようにする簡単な方法はありますか?
に設定すればnull
うまくいくと思ったのですが、どうやらうまくいかないようです。
ベストアンサー1
配列要素を削除するにはさまざまな方法があり、特定のタスクでは他の方法よりも便利な方法があります。
配列の要素を1つ削除する
配列の要素を1つだけ削除したい場合は、unset()
あるいはarray_splice()
。
キー別ですか、それとも値別ですか?
要素を削除するには、値がわかっていてキーがわからない場合は、array_search()
キーを取得します。これは、要素が複数回出現しない場合にのみ機能します。array_search()
最初のヒットのみが返されるためです。
unset()
表現
注意:unset()
配列を使用する場合、キーは変更されません。キーを再インデックスする場合は、array_values()
後unset()
、すべてのキーを0から始まる数値の列挙キーに変換します(配列はリスト)。
コード例:
$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
// ↑ Key of element to delete
出力例:
[
[0] => a
[2] => c
]
array_splice()
関数
を使用すると、array_splice()
(整数) キーは自動的に再インデックスされますが、連想 (文字列) キーは変更されません。これは、array_values()
の後ではunset()
すべてのキーが数値キーに変換されるのとは対照的です。
注意: 2 番目のパラメータとして、キーではなくオフセットarray_splice()
が必要です。オフセット配列キー。 = array_flip(array_keys(
))[
]
コード例:
$array = [0 => "a", 1 => "b", 2 => "c"];
array_splice($array, 1, 1);
// ↑ Offset of element to delete
出力例:
[
[0] => a
[1] => c
]
array_splice()
と同様にunset()
、配列を参照によって取得します。戻り値を配列に代入し直すことはありません。
複数の配列要素の削除
unset()
複数の配列要素を削除する必要があり、または を複数回呼び出したくない場合は、配列から削除する要素の値またはキーがわかっているかどうかに応じて、 または関数array_splice()
を使用できます。array_diff()
array_diff_key()
array_diff()
関数
削除したい配列要素の値がわかっている場合は、 を使用できますarray_diff()
。 以前と同様に、unset()
では配列のキーは変更されません。
コード例:
$array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
$array = array_diff($array, ["a", "c"]);
// └────────┘
// Array values to delete
出力例:
[
[1] => b
]
array_diff_key()
関数
削除したい要素のキーがわかっている場合は、 を使用しますarray_diff_key()
。キーを値としてではなく、2 番目のパラメータのキーとして渡すようにしてください。キーは再インデックスされません。
コード例:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
// ↑ ↑
// Array keys of elements to delete
出力例:
[
[1] => b
]
同じ値を持つ複数の要素を使用しunset()
たり削除したりする場合は、array_splice()
array_keys()
特定の値のすべてのキーを取得し、すべての要素を削除します。
array_filter()
関数
配列内の特定の値を持つすべての要素を削除する場合は、 を使用できますarray_filter()
。
コード例:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = array_filter($array, static function ($element) {
return $element !== "b";
// ↑
// Array value which you want to delete
});
出力例:
[
[0] => a
[2] => c
]