繁体   English   中英

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

[英]PHP how to remove key from 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
        )

)

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

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

演示中检查结果

您不能为此使用array_filter array_filter处理值,但您想删除特定键。

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

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

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

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

两个演示

$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
    )
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM