重新格式化没有临时变量的数组

cle*_*hup 0 php arrays format

我有下一个阵列

[
    ['id' => 30, 'count' => 3],
    ['id' => 45, 'count' => 7]
]
Run Code Online (Sandbox Code Playgroud)

我需要它

[
    30 => ['count' => 3],
    45 => ['count' => 7]
]
Run Code Online (Sandbox Code Playgroud)

我做了什么

$formatted = [];
foreach ($services as $service) {
    $formatted[$service['id']] = [
        'count' => $service['count']
    ];
}
Run Code Online (Sandbox Code Playgroud)

我想要的是没有临时$格式变量的更优雅的解决方案.谢谢!

更新.非常感谢@rtrigoso!使用laravel集合,我的代码看起来是下一个

$services->reduce(function ($carry, $item) {
        $carry[$item['id']] = ['count' => $item['count']];
        return $carry;
    });
Run Code Online (Sandbox Code Playgroud)

iai*_*inn 5

您可以在一行中执行以下操作array_column:

$array = array_column($array, null, 'id');
Run Code Online (Sandbox Code Playgroud)

您想要的输出之间的一个区别是,它仍然包含id数组第二级中的键,如下所示:

[
    30 => ['id' => 30, 'count' => 3],
    45 => ['id' => 45, 'count' => 7],
]
Run Code Online (Sandbox Code Playgroud)

但希望不会引起任何问题.如果你确实需要删除它,你可以使用以下方法:

$array = array_map(function ($e) {
    unset($e['id']);
    return $e;
}, $array);
Run Code Online (Sandbox Code Playgroud)

这种方法可能是最好的,如果您的行将来可能会有更多的键,即列出要删除的键而不是要保留的键更快.如果没有,并且你只有一个计数,那么说实话,你原来的例子可能是你得到的最好的.