如果之前有人问过这个问题,或者甚至不可能这样做,我很抱歉,但这是我希望从使用MySQL的特定表中得到的。
说,我有下表:
+-------------+------------------+
| property | value |
+-------------+------------------+
| style | unisex |
| color | blue |
| type | small |
+-------------+------------------+
我希望能够从property
获取两列value
和MySQL
作为关联数组,因此最终结果为:
array(
'style' => 'unisex',
'color' => 'blue',
'type' => 'small',
);
只是为了提供背景,所以人们不会误解我的要求:
我已经知道如何使用PHP将结果从通用SQL
语句返回,该语句将每行的列作为key => value
对返回。我只是想知道是否可以将一个列的值作为键返回,将第二个值作为MySQL
中每行的键的值直接在PHP
中继续。
答案 0 :(得分:3)
没有开箱即用的获取模式会给你一个像那样索引的数组(如何知道哪个是关键?如果有超过2列?)。
您可以使用PDO::FETCH_NUM
和array_map()
构建新数组,使用第一列作为键,第二列作为值:
<?php
$query = $db->prepare("SELECT property, value FROM table");
$query->execute();
$row = $query->fetchAll(PDO::FETCH_NUM);
$rowFormatted = array_map(function ($el) {
return [$el[0] => $el[1]];
}, $row);
var_dump($rowFormatted);
旁注:您似乎正在进入Entity-Attribute-Value反模式。这个将带给您一些问题,因此请考虑重新设计您的架构。请查看此资源以了解更多信息:
答案 1 :(得分:0)
古老的问题,但我想至少要提供一个仅MySQL的解决方案,因为这是所要的:
$stmt = $db->prepare('SELECT `property`, `value` FROM `table` WHERE 1');
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
$results
将按照您期望的格式进行格式化-以property
作为键,value
作为值的数组。