我有一个这样的数组
$users = array(
[0] => array('Id' => 3, 'Name' => 'Bob'),
[1] => array('Id' => 8, 'Name' => 'Alice'),
)
我想将 ID“向上”拉一级,以便最终数组为:
$usersById = array(
[3] => array('Id' => 3, 'Name' => 'Bob'),
[8] => array('Id' => 8, 'Name' => 'Alice'),
)
Id 值是唯一的。
是否有原生的 PHP 方法可以做到这一点?我目前使用的代码是:
$usersById = array();
foreach ($users as $key => $value)
{
$usersById[$value['Id']] = $value;
}
这可行,但不是很优雅。
现代答案(需要 PHP 5.5)
新函数array_column
非常通用,它可以做的事情之一就是这种类型的重建索引:
// second parameter is null means we 're just going to reindex the input
$usersById = array_column($users, null, 'Id');
原始答案(适用于较早的 PHP 版本)
您需要使用 array_map
从子数组中获取 ID ,然后用 array_combine
创建一个新数组:
$ids = array_map(function($user) { return $user['Id']; }, $users);
$users = array_combine($ids, $users);
上面的代码需要 PHP >= 5.3 的匿名函数语法,但你也可以用 create_function
做同样的事情(尽管它看起来有点丑)。只需要 PHP >= 4.0.1:
$ids = array_map(create_function('$user', 'return $user["Id"];'), $users);
$users = array_combine($ids, $users);
See it in action .