不确定是否有更好的方法。你可以试试这个?
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
$languages = array();
function getLangs($col, $row) {
$languages[$col['id']] = $col['name'];
}
array_walk($rows, 'getLangs');
foreach 循环没有任何问题。我实际上会使用你所拥有的。很难比这更干净...
更新:
在仔细阅读您的问题之后,您真正应该问的是您是否可以格式化您的查询,以使结果以不同的格式返回。
因此,返回您的正常 SELECT 查询的方式是:
+----+----------+
| id | name |
+----+----------+
| 1 | svenska |
| 2 | engelska |
| .. | ... |
| .. | ... |
+----+----------+
$row = array(
row_1 => array(
id => "1",
name => "svenska"
),
row_2 => array(
id => "2",
name => "engelska"
),
row_3 => array(
id => "...",
name => "..."
),
row_4 => array(
id => "...",
name => "..."
)
)
$row[$row_number][$column_name] = $value
您要求的是某种方式来返回您的查询结果,如下所示:
// Query result is only one row, with each 'id' as column name
// And the 'name' from the same row as it's value...
+---------+----------+-----+-----+-----+
| 1 | 2 | ... | ... | ... |
+---------+----------+-----+-----+-----+
| svenska | engelska | ... | ... | ... |
+---------+----------+-----+-----+-----+
$row = array(
row_1 => array(
1 => "svenska",
2 => "engelska",
... => "...",
... => "...",
... => "..."
)
)
$languages = $row[row_1];
$languages[$id] = $name;
老实说,我不完全确定你可以在 SQL 中做到这一点。即使可以,我也建议不要这样做。对于缩放表来说,这将是可怕的。如果您的表格是静态的,那么为什么不按照我刚开始提到的方式对其进行格式化呢?为什么不把它放在包含文件的静态 PHP 数组中呢?