php - 使用特定列中的值替换第一级数组键

标签 php arrays multidimensional-array array-column

<分区>

我有一个这样的数组

$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 .

关于php - 使用特定列中的值替换第一级数组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7456837/

相关文章:

php - 在 MySQL 中将 2 个更新查询作为一个运行

php - MySQL char 接受不固定的值

python ,OpenCV : Increasing image brightness without overflowing UINT8 array

javascript - 如何从javascript中的两个json数组中获取不匹配的对象

algorithm - 数字数组的最优冒泡排序算法

php - 为什么 margin-top 在 Mac 上减少了 2px?

php - 如何测试数组指针是否在foreach循环中的第一个元素

php - 使用 mysql 结果从多维 PHP 数组构建树

c - 在 C 中声明字符串与整数的二维数组?

c++ - 检查移动是否有效的简单游戏算法