もっと良い方法があるかどうかはよくわかりません。あなたはこれを試すことができますか?
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
$languages = array();
function getLangs($col, $row) {
$languages[$col['id']] = $col['name'];
}
array_walk($rows, 'getLangs');
foreachループに問題はありません。私は実際にあなたが持っているものを使います。それよりきれいにするのは難しいです...
アップデート:
質問を注意深く読み直した後、本当に質問する必要があるのは、結果が別の形式で返されるようにQUERYをフォーマットできるかどうかです。
したがって、通常の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配列にそれを入れてみませんか?