PHP - 寻找在嵌套数组项的项前添加特定键的更好方法
PHP - Looking for better way to add specific key in front of items of nested array items
在很多项目中,我给嵌套的 array/objects 一个标识符作为键或索引,并带有这样的辅助函数:
function foo($array, $key) {
foreach($array AS $idx => $item) {
$array[$item[$key]] = $item;
unset($array[$idx]);
}
return $array;
}
$array = foo($array, 'id');
通过这样的转换,更容易定位数组中的项目。
示例:
$array['A12314']
$array['A12312']['status']
问题
但是是否已经有更好的方法来实现这一点(也许是内置的或更方便的方法)?
源数组
[
[
"id" => "A12312",
"status" => false,
"enabled" => true,
],
[
"id" => "A12313",
"status" => false,
"enabled" => false,
],
[
"id" => "A12314",
"status" => true,
"enabled" => false,
],
[
"id" => "A12315",
"status" => true,
"enabled" => true,
],
]
目标数组
[
"A12312" => [
"id" => "A12312",
"status" => false,
"status" => true,
],
"A12313" => [
"id" => "A12313",
"status" => false,
"status" => false,
],
"A12314" => [
"id" => "A12314",
"status" => true,
"status" => false,
],
"A12315" => [
"id" => "A12315",
"status" => true,
"status" => true,
],
]
使用 array_column
将 id
值提取到平面数组中,然后将 array_combine
与原始数组一起使用。
$input = [
[
"id" => "A12312",
"status" => false,
"enabled" => true,
],
[
"id" => "A12313",
"status" => false,
"enabled" => false,
],
[
"id" => "A12314",
"status" => true,
"enabled" => false,
],
[
"id" => "A12315",
"status" => true,
"enabled" => true,
],
];
$ids = array_column($input, 'id');
$result = array_combine($ids, $input);
var_dump($result);
在很多项目中,我给嵌套的 array/objects 一个标识符作为键或索引,并带有这样的辅助函数:
function foo($array, $key) {
foreach($array AS $idx => $item) {
$array[$item[$key]] = $item;
unset($array[$idx]);
}
return $array;
}
$array = foo($array, 'id');
通过这样的转换,更容易定位数组中的项目。
示例:
$array['A12314']
$array['A12312']['status']
问题
但是是否已经有更好的方法来实现这一点(也许是内置的或更方便的方法)?
源数组
[
[
"id" => "A12312",
"status" => false,
"enabled" => true,
],
[
"id" => "A12313",
"status" => false,
"enabled" => false,
],
[
"id" => "A12314",
"status" => true,
"enabled" => false,
],
[
"id" => "A12315",
"status" => true,
"enabled" => true,
],
]
目标数组
[
"A12312" => [
"id" => "A12312",
"status" => false,
"status" => true,
],
"A12313" => [
"id" => "A12313",
"status" => false,
"status" => false,
],
"A12314" => [
"id" => "A12314",
"status" => true,
"status" => false,
],
"A12315" => [
"id" => "A12315",
"status" => true,
"status" => true,
],
]
使用 array_column
将 id
值提取到平面数组中,然后将 array_combine
与原始数组一起使用。
$input = [
[
"id" => "A12312",
"status" => false,
"enabled" => true,
],
[
"id" => "A12313",
"status" => false,
"enabled" => false,
],
[
"id" => "A12314",
"status" => true,
"enabled" => false,
],
[
"id" => "A12315",
"status" => true,
"enabled" => true,
],
];
$ids = array_column($input, 'id');
$result = array_combine($ids, $input);
var_dump($result);