1. ホーム
  2. php

[解決済み] PHPで配列から要素を削除する

2022-03-15 19:28:11

質問

PHPで配列から要素を削除する簡単な方法はありますか? foreach ($array) は、もはやその要素を含まないのですか?

に設定するのが良いかと。 null で済むのですが、どうやらうまくいかないようです。

解決方法は?

配列の要素を削除する方法はさまざまで、ある特定のタスクに役立つものとそうでないものがあります。

配列要素を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 which you want to delete

出力します。

[
    [0] => a
    [2] => c
]

\array_splice() メソッド

を使用する場合 \array_splice() とは異なり、キーは自動的に再インデックス化されますが、 連想キーは変更されません。 \array_values() これは、すべてのキーを数値キーに変換します。

\array_splice() が必要です。 オフセット ではなく キー を2番目のパラメータとして使用します。

コード

$array = [0 => "a", 1 => "b", 2 => "c"];
\array_splice($array, 1, 1);
                   // ↑ Offset which you want 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 which you want 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 which you want to delete

出力します。

[
    [1] => b
]

を使いたい場合は unset() または \array_splice() 同じ値を持つ複数の要素を削除する場合は、次のようにします。 \array_keys() を使って、特定の値に対応するすべてのキーを取得し、すべての要素を削除します。