MySQL / PHP:将两列作为关联数组返回为key =>价值对

时间:2017-10-18 17:17:38

标签: php mysql associative-array

如果之前有人问过这个问题,或者甚至不可能这样做,我很抱歉,但这是我希望从使用MySQL的特定表中得到的。

说,我有下表:

+-------------+------------------+
| property    | value            |
+-------------+------------------+
| style       | unisex           |
| color       | blue             |
| type        | small            |
+-------------+------------------+

我希望能够从property获取两列valueMySQL作为关联数组,因此最终结果为:

array(
    'style' => 'unisex',
    'color' => 'blue',
    'type'  => 'small',
);

只是为了提供背景,所以人们不会误解我的要求:

我已经知道如何使用PHP将结果从通用SQL语句返回,该语句将每行的列作为key => value对返回。我只是想知道是否可以将一个列的值作为键返回,将第二个值作为MySQL中每行的键的值直接在PHP中继续。

2 个答案:

答案 0 :(得分:3)

没有开箱即用的获取模式会给你一个像那样索引的数组(如何知道哪个是关键?如果有超过2列?)。

您可以使用PDO::FETCH_NUMarray_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作为值的数组。

资源:https://www.php.net/manual/en/pdo.constants.php