将非关联数组列表转换为关联数组


Converting a non-associative list of arrays to an associative array of arrays

我有一个数组列表(或对象,它们通过PDO fetchAll()函数来自数据库,所以这两个选项对我来说都可以(。我希望将数组列表转换为数组的关联数组,每个数组的键都是它的一列。

我显然可以做一个循环,但我想知道是否有一些PHP函数已经这样做了,也许是以更有效的方式。

为了说明这一点,假设我有一个数组(非关联(,里面有数组:

[0] => {'name' : 'Joe', 'surname' : 'Bloggs', 'id' : '12345'}
[1] => {'name' : 'Sandy', 'surname' : 'Smith', 'id' : '54321'}

我希望将其转换为:

['12345'] => {'name' : 'Joe', 'surname' : 'Bloggs', 'id' : '12345'}
['54321'] => {'name' : 'Sandy', 'surname' : 'Smith', 'id' : '54321'}

一个简单的循环就可以了,但这太无聊了,无法发布答案,所以开始吧:

$array = array_combine(array_map(function (array $row) { return $row['id']; }, $array),
                       $array);

如果你偏爱功能性PHP:

$array = array_combine(F'pluck($array, 'id'), $array);
$rows = $stmt->fetch(PDO::FETCH_ASSOC);

$rows = $stmt->fetchall(PDO::FETCH_ASSOC);

让我们阅读一下HashPHP所说的:

注意在FETCH((和fetchAll((代码中使用PDO::FETCH_ASSOC在上面此命令告诉PDO将行作为关联数组返回字段名称为键。其他获取模式,如PDO::fetch_NUM返回行作为数字数组。默认情况下,使用PDO::FETCH_BOTH,它用数字和关联键。建议您指定一个或另一个,以便不要有两倍大小的数组!PDO还可以获取对象使用PDO::FETCH_OBJ,并且可以使用PDO::FETCH_CLASS。它还可以绑定到具有PDO::FETCH_BOUND并使用bindColumn方法。