php(PDO)将查找表中的行转换为简单数组的简单方法

Chr*_*cho 2 php mysql sql arrays pdo

给定一个非常简单的表结构:

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

这会在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 ) ) 
Run Code Online (Sandbox Code Playgroud)

我错过了一些简单的技巧,将其转换为一个简单的数组,其中id为关键,如下所示:

Array ( [1] => Lead Guitar
        [2] => Bass Guitar
        [3] => Drums
        [4] => Keyboard )
Run Code Online (Sandbox Code Playgroud)

或者是否有可能让PDO提供这样的阵列?

TIA

Elw*_*nar 5

您可以简单地使用PDO::FETCH_KEY_PAIR结果中只有2列.

如果你有更多,你也可以使用PDO::FETCH_GROUPPDO::FETCH_ASSOC.示例:

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

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

示例:

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