从阵列中删除具有某些键的项目

时间:2015-03-26 13:17:59

标签: php

我有一个如下所示的数组:

$arr = [
    0 => "A",
    1 => "B",
    2 => "C",
    3 => "D",
    4 => "E",
];

我想删除一些项目,我有他们的密钥数组:

$delKeys = [0,2,3];

以下过程显示了我想要实现的目标:

foreach ($delKeys as $dk) {
    unset($arr[$dk]);
}

我离开了:

array(
    [1] => "B",
    [4] => "E",
)

是否有一个构建方法可以执行上述3-liner,如array_filter,但保留原始数组的键?

3 个答案:

答案 0 :(得分:7)

两个函数,但至少有一行 - array_diff_key()以及array_flip()

array_diff_key($arr, array_flip($delKeys))

Array
(
    [1] => B
    [4] => E
)

答案 1 :(得分:0)

array_diff_key($arr, array_flip($delKeys))

array_flip函数会将值翻转到键中,而不是array_diff_key找到两个数组之间的差异

答案 2 :(得分:-3)

您可以随时为此任务定义自己的功能:

/**
 * Remove the specified keys from a given array.
 *
 * @param  array $array
 * @param  array $keys
 * @return array
 */
function array_forget(array $array, array $keys)
{
    foreach ($keys as $key)
    {
        unset($array[$key]);
    }

    return $array;
}

用法:

$arr = array_forget($arr, [0,2,3]);