-->

PDO关联数组 - 返回关联(PDO associative arrays - return ass

2019-07-22 01:20发布

我有这样的代码:

$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语句来达到同样的结果数组$语言产生。 我已经尝试了一些不同的fetch_styles。

我已经尝试了一些不同的风格和我能得到这样的:

[0] svenska
[1] engelska

但我想这样的:

[1] svenska
[2] engelska

(其中,1和2是在数据库ID的值)

我想我可以创建一个函数,并调用与FETCH_FUNC ,但我不知道这将是如此之大任。

为做到这一点的最好/干净的方式上面?

Answer 1:

真的不知道,如果有什么更好的办法。 你可以试试这个?

$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数组?



Answer 2:

每个人都忘记了

$sth->fetchAll(PDO::FETCH_KEY_PAIR);


Answer 3:

我想你可能会寻找$result = $sth->fetch(PDO::FETCH_ASSOC);

参考: http://php.net/manual/en/pdostatement.fetch.php

[编辑]抱歉迟到:)



文章来源: PDO associative arrays - return associative