簡體   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