如何将一个php多维数组转换成一个以第一列为键的新数组?

6psbrbz9  于 2022-12-17  发布在  PHP
关注(0)|答案(3)|浏览(137)

我正在尝试使用一个数组函数(我考虑过array_map()array_walk(),但无法让它完成我想要的任务),以便使用多维数组创建一个数组(类似于MySQL结果),将数组中的字段转换为新数组的键。
假设我有一个如下的数组:

$a = array(
    0 => array( 'id' => 1, 'name' => 'john' ), 
    1 => array( 'id' => 28, 'name' => 'peter' )
);

我想得到另一个这样的数组:

$b = array(
    1 => array( 'name' => 'john' ), 
    28 => array( 'name' => 'peter' )
);

我可以用一个简单的foreach循环来解决这个问题,但是我想知道是否有更有效的方法,使用一个内置函数。

mcdcgff0

mcdcgff01#

array_maparray_walk不允许你改变键,foreach循环绝对是一个不错的选择,很多时候Foreach甚至比array_walk/array_map更有效。

2hh7jdfx

2hh7jdfx2#

您可以使用array_column函数,其输出接近您想要的

array_column($a, null, 'id')
wixjitnu

wixjitnu3#

这个任务实际上可以用一个“无主体”的foreach()循环来完成。
使用“数组析构”来定义变量和方括号推送语法,整个操作可以写入foreach()签名。
代码:(Demo

$result = [];
foreach ($a as ['id' => $id, 'name' => $result[$id]['name']]);

var_export($result);

如果函数方法是首选的,则array_reduce()能够将第一级密钥写入输出数组。
代码:(Demo

var_export(
    array_reduce(
        $a,
        fn($result, $row) => array_replace($result, [$row['id'] => ['name' => $row['name']]]), 
        []
    )
);

相关问题