从多维数组的子数组中删除不需要的元素
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'
]
...
[ ... ]
]
如何删除所有子数组中的元素并仅保留 id 和 name 键及其值?
这行得通吗?
$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);
我有一个这样的多维数组:
[
[
'id' => 1,
'name' => 'John',
'address' => 'Some address 1'
'city' => 'NY'
],
[
'id' => 2,
'name' => 'Jack',
'address' => 'Some address 2'
'city' => 'NY'
]
...
[ ... ]
]
如何删除所有子数组中的元素并仅保留 id 和 name 键及其值?
这行得通吗?
$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);