从多维数组中的子数组中删除不需要的元素

Remove unwanted elements from subarrays in multidimensional array

提问人:Johan 提问时间:3/27/2020 最后编辑:mickmackusaJohan 更新时间:2/9/2022 访问量:583

问:

我有一个多维数组,如下所示:

[
    [
        'id' => 1,
        'name' => 'John',
        'address' => 'Some address 1'
        'city' => 'NY'
    ],
    [
        'id' => 2,
        'name' => 'Jack',
        'address' => 'Some address 2'
        'city' => 'NY'
    ]
    ...
  
    [ ... ]
]

如何删除所有子数组中的元素,只保留 idname 键及其值?

PHP slice unset 子数组

评论

0赞 El_Vanja 3/27/2020
您是否真的需要过滤(按某个值),或者您只是想简单地提取这两个键?
1赞 Johan 3/27/2020
也许错误的术语“过滤器”——我正在寻找的是只保留该 Multidim 阵列中的这 2 个键
0赞 nice_dev 3/27/2020
循环并取消设置所有其他。或使用array_column
0赞 El_Vanja 3/27/2020
如果您还想保持原始数组完好无损,那么构建新数组的简单方法将是最佳选择。foreach

答:

4赞 nkkollaw 3/27/2020 #1

这行得通吗?

$result = array_map(function($arr) {
    return [
        'id' => $arr['id'],
        'name' => $arr['name']
    ];
}, $orig_array);
-1赞 nice_dev 3/27/2020 #2

如果要就地编辑相同的数组,只需遍历它们和它们即可。unset

<?php 

$preserve_keys = ['id','name'];

foreach($arr as &$data){
    foreach($data as $key => $value){
        if(!in_array($key,$preserve_keys)){
            unset($data[$key]);
        }
    }
}

如果希望将其作为单独的结果,请循环访问并将其添加到新数组中。

<?php

$new_result = [];

foreach($arr as $data){
    $new_result[] = [
        'id' => $data['id'],
        'name' => $data['name']
    ];
}

print_r($new_result);
0赞 mickmackusa 2/7/2022 #3

您希望保留前两个关联元素,以便可以在 中进行调用。(演示array_slice()array_map())

var_export(
    array_map(fn($row) => array_slice($row, 0, 2), $array)
);

或针对建立白名单数组进行映射调用。(演示array_intersect_key())

$keep = ['id' => '', 'name' => ''];
var_export(
    array_map(
        fn($row) => array_intersect_key($row, $keep),
        $array
    )
)

或者,您可以在经典中使用数组解构并进行迭代调用。(演示foreach()compact())

$result = [];
foreach ($array as ['id' => $id, 'name' => $name]) {
    $result[] = compact(['id', 'name']);
}
var_export($result);