8

配列からいくつかのキーを削除する必要があります。

$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');
unset($array['a']);
unset($array['b']);

どうすればこれをもっと優雅にすることができますか?たぶんこのような機能はありますarray_keys_unset('a', 'b')か?または
は必要ありません。私はそれが可能かどうか知りたいだけです。 前もって感謝します。私の英語と子供のような質問でごめんなさい。array_valuesforeach

4

5 に答える 5

15

次のように1回呼び出すだけでそれを行うことができますunset

unset($array['a'],$array['b']);
于 2010-12-10T14:52:34.063 に答える
5

unset()簡単ですが、別の解決策としてこれはどうですか?

$keys_to_remove = array_flip(array('a', 'b'));
$array = array_diff_key($array, $keys_to_remove);

関数に入れる:

function array_unset_keys(array $input, $keys) {
    if (!is_array($keys))
        $keys = array($keys => 0);
    else
        $keys = array_flip($keys);

    return array_diff_key($input, $keys);
}

$array = array_unset_keys($array, array('a', 'b'));

unset()または、次のように可変数の引数を渡すことで、次のようにすることもできます。

function array_unset_keys(array $input) {
    if (func_num_args() == 1)
        return $input;

    $keys = array_flip(array_slice(func_get_args(), 1));

    return array_diff_key($input, $keys);
}

$array = array_unset_keys($array, 'a', 'b');
于 2010-12-10T14:54:59.527 に答える
3

個人的には、設定するキーの長い/任意のリストがある場合にこれを行います。

foreach (array('a', 'b') as $key) unset($array[$key]);

のような配列関数を組み合わせて使用​​することもできますがarray_diff_key()、上記の方が覚えやすいと思います。

于 2010-12-10T14:54:18.610 に答える
3

何が問題なのunset()ですか?

あなたができることに注意してくださいunset($array['a'], $array['b']);

提案したような関数を作成することもできますが、変数パラメーターの代わりに配列を使用します。

于 2010-12-10T14:54:50.610 に答える
3

いいえ、のような事前定義された関数はありませんarray_keys_unset

unset複数の変数を渡すことができます。

unset($array['a'], $array['b']);

またはあなたはそのような自分で書くarray_keys_unset

function array_keys_unset(array &$arr) {
    foreach (array_slice(func_get_args(), 1) as $key) {
        unset($arr[$key]);
    }
}

その関数の呼び出しは、次のようになります。

array_keys_unset($array, 'a', 'b');
于 2010-12-10T14:54:56.450 に答える