私はこのコードを持っています:
$dbInstance = DB_Instance::getDBO();
$statement = $dbInstance->prepare("SELECT id, name FROM language ORDER BY id");
$statement->execute();
$rows = $statement->fetchAll();
//Create associative array wuth id set as an index in array
$languages = array();
foreach($rows as $r) {
$languages[$r['id']] = $r['name'];
}
return $languages;
PDOステートメントを使用して配列$ languagesが生成するのと同じ結果を達成する方法を理解できません。私はいくつかの異なるfetch_stylesを試しました。
私はいくつかの異なるスタイルを試しましたが、次のようになりました。
[0] svenska
[1] engelska
しかし、私は好きが欲しい:
[1] svenska
[2] engelska
(ここで、1と2はデータベース内のidの値です)
関数を作成してFETCH_FUNC
で呼び出すことができると思いますが、それがそれほど素晴らしいかどうかもわかりません。
上記はそれを行うための最良/最もクリーンな方法ですか?
もっと良い方法があるかどうかはよくわかりません。あなたはこれを試すことができますか?
$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配列に入れてみませんか?
誰もが忘れていた
$sth->fetchAll(PDO::FETCH_KEY_PAIR);
$result = $sth->fetch(PDO::FETCH_ASSOC);
を探しているのではないかと思います
参照: http://php.net/manual/en/pdostatement.fetch.php
[編集]おっと遅くまで:)