【问题标题】:fetch data primary key value as the index for the associative array获取数据主键值作为关联数组的索引
【发布时间】:2015-01-06 08:11:51
【问题描述】:

执行获取查询后,我得到一个结果数组:

[row_choice] => Array
  (
    [0] => Array
      (
        [id] => 277410
        [text_value] => Two Wheel
      )
    [1] => Array
      (
        [id] => 277411
        [text_value] => Three Wheel
      )
    [2] => Array
      (
        [id] => 277412
        [text_value] => Four Wheel
      )
  )

我怎样才能得到这样的结果数组?:

[row_choice] => Array
  (
    [277410] => Array
      (
        [id] => 277410
        [text_value] => Two Wheel
      )
    [277411] => Array
      (
        [id] => 277411
        [text_value] => Three Wheel
      )
    [277412] => Array
      (
        [id] => 277412
        [text_value] => Four Wheel
      )
  )

我该怎么办?

我的查询是

SELECT id,text_value FROM answer_choice

【问题讨论】:

  • 我猜没有多少数据库扩展提供这个功能。但是如果你已经有了结果数组,你可以自己构造想要的数组。

标签: php mysql arrays


【解决方案1】:

无法直接从 SQL 查询中获取:但您可以检索所有数据,然后重新映射数组

使用 PHP 5.5 的 array_column() 您可以执行以下操作:

$myarray['row_choice'] = array_combine(
    array_column($myarray['row_choice'], 'id'),
    $myarray['row_choice']
);

对于早期版本的 PHP,请改用array_map()

$myarray['row_choice'] = array_combine(
    array_map(
        function($value) {
            return $value['id'];
        },
        $myarray['row_choice']
    ),
    $myarray['row_choice']
);

【讨论】:

    【解决方案2】:

    您应该创建一个新的数组变量,如下所示。

    $recArr = array();
    
    while ($records = mysqli_fetch_array($query)) {
        $recArr[$records['id']] = $records;
    }
    
    var_dump($recArr);
    

    祝你好运。

    【讨论】:

    • 哈——你打败了我。我同意,如果您别无选择,只能按原样执行查询,那么以前建议的后处理步骤之一(如 array_combine)可能是最好的。但是在我看来,越早构建所需的数据结构越好(避免无关的内存复制和迭代),所以如果它完全可以选择,我个人会推荐这种方法。 (现在要删除我重复的答案)
    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2011-03-22
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多