PDO关联数组 - 返回关联

bes*_*rld 11 arrays pdo associative

我有这个代码:

$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;
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使用PDO语句来实现数组$ languages产生的相同结果.我尝试了一些不同的fetch_styles.

我尝试了一些不同的风格,我可以这样:

[0] svenska
[1] engelska
Run Code Online (Sandbox Code Playgroud)

但我想要:

[1] svenska
[2] engelska
Run Code Online (Sandbox Code Playgroud)

(其中1和2是数据库中id的值)

我想我可以创建一个函数并调用它,FETCH_FUNC但我不确定它会如此之大.

以上是最好/最干净的方法吗?

小智 19

大家都忘记了

$sth->fetchAll(PDO::FETCH_KEY_PAIR);
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用多个列,这可能是一个更好的解决方案:`$ STH-> fetchAll(PDO :: FETCH_ASSOC);` (3认同)

jds*_*sky 13

不确定是否有更好的方法.你可以尝试一下吗?

$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

$languages = array();

function getLangs($col, $row) {
     $languages[$col['id']] = $col['name'];
}

array_walk($rows, 'getLangs');
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

您要求的是某种方式返回您的查询结果,如:

// 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;
Run Code Online (Sandbox Code Playgroud)

我不完全确定你能用SQL 做到这一点,说实话.我也建议反对它,即使你可以.对于缩放表来说,这将是可怕的.如果你的表是静态的,那么为什么不按照我刚开始提到的方式对其进行格式化呢?为什么不将它放在包含文件中的静态PHP数组中?


tat*_*eek 8

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

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

[编辑] oops到晚:)