【问题标题】:MySQL/PHP: return two columns as an associative array as key => value pairs [duplicate]MySQL / PHP:将两列作为关联数组作为键=>值对返回[重复]
【发布时间】:2018-03-30 15:46:54
【问题描述】:

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

说,我有下表:

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

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

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

只是为了提供上下文,以免人们误解我的要求:

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

【问题讨论】:

  • 你能看看mysqli_fetch_array
  • 你当然可以编写代码来翻译这样的结果集。
  • 我知道如何在PHP 中编写代码来实现这一点,一旦我得到 MySQL 查询的结果。我只是想知道是否可以直接从 SQL 中完成。

标签: php mysql associative-array


【解决方案1】:

没有开箱即用的获取模式可以为您提供这样索引的数组(它如何知道哪个是键?如果有超过 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);

旁注:看起来您正在进入实体-属性-值反模式。这给您带来问题,因此请考虑重新设计您的架构。查看此资源以了解更多信息:

【讨论】:

    【解决方案2】:

    老问题,但我认为我至少会提供一个仅限 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 2015-07-23
      • 2012-05-12
      • 2021-02-03
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      相关资源
      最近更新 更多