PDO associative arrays - return associative
Everybody forgot about the
$sth->fetchAll(PDO::FETCH_KEY_PAIR);
Not really sure if there's any better way. You could try this?
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
$languages = array();
function getLangs($col, $row) {
$languages[$col['id']] = $col['name'];
}
array_walk($rows, 'getLangs');
There's nothing wrong with foreach loops. I'd actually use what you've got. It's hard to get cleaner than that...
UPDATE:
After carefully re-reading your question, what you REALLY should be asking is whether you can format your QUERY in such a way that the results are returned in a different format.
The way that your normal SELECT query is returned is thusly:
+----+----------+
| 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
What you're asking for is for some way to return your query results like THIS:
// 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;
I'm not entirely sure you CAN do this in SQL, to be perfectly honest. I would also recommend against it, even if you could. It would be horrendous for a scaling table. If your table is static, then why not format it in the way I just mentioned to begin with? Why not just have it in a static PHP array in an include file?