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

Remove unwanted elements from subarrays in multidimensional array

我有一个这样的多维数组:

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

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

这行得通吗?

$result = array_map(function($arr) {
    return [
        'id' => $arr['id'],
        'name' => $arr['name']
    ];
}, $orig_array);

如果您想就地编辑同一个数组,您可以简单地遍历它们并 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);

您想保留前两个关联元素,因此可以在 array_map() 内进行 array_slice() 调用。 (Demo)

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

或映射调用 array_intersect_key() 建立白名单数组。 (Demo)

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

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

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