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');

通过这样的转换,更容易定位数组中的项目。

示例:

问题

但是是否已经有更好的方法来实现这一点(也许是内置的或更方便的方法)?


源数组

[
    [
        "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_columnid 值提取到平面数组中,然后将 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);

https://3v4l.org/VD1Fh