从数据库中获取数组,使用其中一列作为数组键

时间:2017-04-23 13:56:11

标签: php mysql pdo

我有一个这样的函数来从数据库中获取用户:

Gst.Element.query_duration()

这将返回如下数组:

function getUsers(){
    $db = db::getInstance();
    $res = $db->prepare("
        SELECT *
        FROM `users`
        ORDER BY `points` DESC
    ");
    $res->execute();
    if($res->rowCount()==0){
        return null;
    }
    return $res->fetchAll();
}

有一种简单的方法可以使用其中一个字段作为密钥吗?在这个例子中,我可能希望字段Array( 0 => {id => 555, name => Smith, firstname => William, points => 123} 1 => {id => 213, name => Hitchcock, firstname => Alfred, points => 95} 2 => {id => 999, name => James, firstname => Kevin, points => 66} ) 用作数组键,所以我希望得到这个结果:

id

我可以通过手动创建一个新的结果数组来实现这一点:

Array(
    555 => {id => 555, name => Smith, firstname => William, points => 123}
    213 => {id => 213, name => Hitchcock, firstname => Alfred, points => 95}
    999 => {id => 999, name => James, firstname => Kevin, points => 66}
)

PHP或PDO是否为此提供了内置解决方案?我试图尽可能降低复杂性(如在速度/内存使用方面)。

1 个答案:

答案 0 :(得分:1)

您可以使用获取模式PDO::FETCH_UNIQUE

return $res->fetchAll(PDO::FETCH_UNIQUE);

请注意,这将使用SELECT中的第一列作为数组索引,并从该行中删除该列。如果您想保留该列(id),则需要选择它两次:

function getUsers(){
    $db = db::getInstance();
    $res = $db->query("
        SELECT u.id as unique_key, u.*
        FROM `users` u
        ORDER BY `points` DESC
    ");
    if($res->rowCount()==0){
        return null;
    }
    return $res->fetchAll(PDO::FETCH_UNIQUE);
}