PHP如何从多维数组中删除键?

时间:2018-09-18 10:20:31

标签: php arrays multidimensional-array

我想从PHP数组中删除键1。我知道如何通过使用foreach循环来实现此目的,但是我想要array_filter解决方案。谁知道我该如何使用数组过滤器方法实现这一目标?

PHP数组:

Array (
    [0] => Array
        (
            [0] => 5000
            [1] => 25
            [2] => 44
        )

    [1] => Array
        (
            [0] => 5000
            [1] => 25
            [2] => 48
        )

    [2] => Array
        (
            [0] => 5000
            [1] => 26
            [2] => 44
        )

    [3] => Array
        (
            [0] => 5000
            [1] => 26
            [2] => 48
        )

)

预期结果:

Array
(
    [0] => Array
        (
            [0] => 5000
            [1] => 44
        )

    [1] => Array
        (
            [0] => 5000
            [1] => 48
        )

    [2] => Array
        (
            [0] => 5000
            [1] => 44
        )

    [3] => Array
        (
            [0] => 5000
            [1] => 48
        )

)

3 个答案:

答案 0 :(得分:2)

您不能为此目的使用array_filter()。请改用array_reduce()

$newArr = array_reduce($array, function($carry, $item){
    $carry[] = [$item[0], $item[2]];
    return $carry;
});

demo中查看结果

答案 1 :(得分:0)

您不能为此使用array_filterarray_filter处理这些值,但您要删除特定的键。

使用array_splice()删除索引并调整以下所有增量。

foreach ($array as &$element) {
    array_splice($element, 1, 1);
}

&使其成为参考变量,因此修改变量会影响数组中的元素。

答案 2 :(得分:0)

如果处理索引数组的数组,@Barmar 的迭代 array_splice() 调用是理想的,因为它们在删除目标键后重新索引子数组。这是他的答案的功能性和动态变化。

(Both Demos)

$array = [
    [5000, 25, 44],
    [5000, 25, 48],
    [5000, 26, 44],
    [5000, 26, 48],
];

$omitKey = 1;

var_export(
    array_map(
        function($row) use($omitKey) {
            array_splice($row, $omitKey, 1);
            return $row;
        },
        $array
    )
);

如果你有一个关联数组(没有索引),那么 array_splice() 不是正确的工具,因为它依赖于位置,而不是键。改用 unset()

$array = [
    ['a' => 5000, 'b' => 25, 'c' => 44],
    ['a' => 5000, 'b' => 25, 'c' => 48],
    ['a' => 5000, 'b' => 26, 'c' => 44],
    ['a' => 5000, 'b' => 26, 'c' => 48],
];

$omitKey = 'b';

var_export(
    array_map(
        function($row) use($omitKey) {
            unset($row[$omitKey]);
            return $row;
        },
        $array
    )
);