PHPで配列から要素を削除する 質問する

PHPで配列から要素を削除する 質問する

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
]

おすすめ記事