首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO关联数组-返回关联

PDO关联数组-返回关联
EN

Stack Overflow用户
提问于 2013-03-20 08:04:30
回答 4查看 35.5K关注 0票数 13

我有这样的代码:

代码语言:javascript
复制
$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-statement来获得与数组$languages相同的结果。我尝试过一些不同的fetch_styles。

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

代码语言:javascript
复制
[0] svenska
[1] engelska

但我想要:

代码语言:javascript
复制
[1] svenska
[2] engelska

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

我想我可以创建一个函数,然后用FETCH_FUNC调用它,但我也不确定这是否会很好。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-21 00:07:43

我不确定有没有更好的办法。你可以试试这个吗?

代码语言:javascript
复制
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

$languages = array();

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

array_walk($rows, 'getLangs');

foreach循环没有任何问题。我真的会用你所拥有的。很难比这更干净了.

更新:

仔细重读你的问题之后,你真正应该问的是,你是否可以用一种不同的格式来格式化你的查询结果。

返回普通SELECT查询的方式如下所示:

代码语言:javascript
复制
+----+----------+
| 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

您需要的是以某种方式返回查询结果,如下所示:

代码语言:javascript
复制
// 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中使用do this。我也会建议你不要这么做,即使你能做到。对于伸缩表来说,这将是可怕的。如果您的表是静态的,为什么不以我刚提到的方式开始格式化它呢?为什么不把它放在一个包含文件的静态PHP数组中呢?

票数 13
EN

Stack Overflow用户

发布于 2014-02-14 03:50:59

每个人都忘记了

代码语言:javascript
复制
$sth->fetchAll(PDO::FETCH_KEY_PAIR);
票数 24
EN

Stack Overflow用户

发布于 2013-03-21 00:00:37

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

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

编辑oops to late :)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15512861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档