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

时间:2013-04-17 22:57:11

标签: php arrays associative-array

我有一个数组列表(或对象,它们来自数据库,通过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'}

2 个答案:

答案 0 :(得分:5)

一个简单的循环可以,但是发布答案太无聊了,所以你走了:

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

如果你偏爱functional PHP

$array = array_combine(F\pluck($array, 'id'), $array);

答案 1 :(得分:-1)

$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方法。