Har*_*per 6 php arrays multidimensional-array
我有这样的数组
$users = array(
[0] => array('Id' => 3, 'Name' => 'Bob'),
[1] => array('Id' => 8, 'Name' => 'Alice'),
)
Run Code Online (Sandbox Code Playgroud)
我想将Ids'向上拉'一级,以便最终的数组是:
$usersById = array(
[3] => array('Id' => 3, 'Name' => 'Bob'),
[8] => array('Id' => 8, 'Name' => 'Alice'),
)
Run Code Online (Sandbox Code Playgroud)
Id值是唯一的.
是否有本机PHP方式来做到这一点?我目前使用的代码是:
$usersById = array();
foreach ($users as $key => $value)
{
$usersById[$value['Id']] = $value;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但不是非常优雅.谢谢!
Jon*_*Jon 17
新功能array_column非常通用,它可以做的一件事就是这种类型的重建索引:
// second parameter is null means we 're just going to reindex the input
$usersById = array_column($users, null, 'Id');
Run Code Online (Sandbox Code Playgroud)
您需要从子数组中获取ID array_map,然后使用以下命令创建一个新数组array_combine:
$ids = array_map(function($user) { return $user['Id']; }, $users);
$users = array_combine($ids, $users);
Run Code Online (Sandbox Code Playgroud)
上面的代码要求PHP> = 5.3用于匿名函数语法,但你也可以做同样的事情(虽然它看起来有点丑陋)create_function,只需要PHP> = 4.0.1:
$ids = array_map(create_function('$user', 'return $user["Id"];'), $users);
$users = array_combine($ids, $users);
Run Code Online (Sandbox Code Playgroud)
sal*_*the 10
您可以使用该array_reduce()功能,例如:
$usersById = array_reduce($users, function ($reduced, $current) {
$reduced[$current['Id']] = $current;
return $reduced;
});
Run Code Online (Sandbox Code Playgroud)
然而,它并不比a更优雅foreach.
| 归档时间: |
|
| 查看次数: |
11557 次 |
| 最近记录: |