【问题标题】:php (PDO) simple way to turn rows in lookup table into simple arrayphp(PDO)将查找表中的行转换为简单数组的简单方法
【发布时间】:2014-07-23 10:50:08
【问题描述】:

因此给出了一个非常简单的表结构:

mysql> describe songpart;
+----------+---------+------+-----+---------+----------------+
| Field    | Type    | Null | Key | Default | Extra          |
+----------+---------+------+-----+---------+----------------+
| id       | int(11) | NO   | MUL | NULL    | auto_increment |
| partName | text    | NO   |     | NULL    |                |
+----------+---------+------+-----+---------+----------------+

在 php 中生成这样的数组(查询时)

Array ( [0] => Array ( [id] => 1 [0] => 1 [partName] => Lead Guitar [1] => Lead Guitar ) 
        [1] => Array ( [id] => 2 [0] => 2 [partName] => Bass Guitar [1] => Bass Guitar ) 
        [2] => Array ( [id] => 3 [0] => 3 [partName] => Drums [1] => Drums ) 
        [3] => Array ( [id] => 4 [0] => 4 [partName] => Keyboard [1] => Keyboard ) ) 

我是否遗漏了一些简单的技巧来将其转换为一个以 id 为键的简单数组,如下所示:

Array ( [1] => Lead Guitar
        [2] => Bass Guitar
        [3] => Drums
        [4] => Keyboard )

或者是否有可能让 PDO 提供这样的数组?

钛酸

【问题讨论】:

    标签: php mysql sql arrays pdo


    【解决方案1】:

    您可以简单地使用PDO::FETCH_KEY_PAIR,因为您的结果中只有 2 列。

    如果您有更多,也可以同时使用PDO::FETCH_GROUPPDO::FETCH_ASSOC。示例:

    $result = $db->query('select * from channels')->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
    

    这将产生一个以第一列为索引的数组,在每个索引处包含该键的结果数组。您可以通过使用array_map('reset', $result) 来解决此问题以实现您的目标。

    例子:

    $result = array_map('reset', $db->query('select * from channels')->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC));
    

    【讨论】:

      【解决方案2】:

      为此,您只需在迭代中设置所需的字段。

      $part_name = [];
      
      $records = $pdo->query('SELECT * FROM your_table');
      foreach ($records as $row) {
          $part_name[$row['id']] = $row['partName'];
      }
      

      【讨论】:

        【解决方案3】:

        试试这个:

        $records = $pdo->query('SELECT id, partName FROM myTable');
        $records->setFetchMode(PDO::FETCH_KEY_PAIR);
        print_r($records->fetchAll());
        

        【讨论】:

          猜你喜欢
          • 2011-01-08
          • 1970-01-01
          • 1970-01-01
          • 2020-05-17
          • 2014-11-23
          • 2016-02-05
          • 2013-06-21
          • 2012-08-28
          • 1970-01-01
          相关资源
          最近更新 更多