2017-04-23 14 views
2

私はこのような機能は、データベースからユーザーを取得する必要があります:キー配列として列のいずれかを使用して、データベースから配列を取得します

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} 
) 

:これは、のような配列を返します

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(); 
} 

フィールドの1つをキーとして使用する簡単な方法はありますか?この例では、私はフィールドidは、配列のキーとして使用することもできますので、私はこの結果たい:

$result = []; 
    foreach($res->fetchAll() as $row){ 
     $result[$row['id']] = $row; 
    } 
    return $result; 

:私は手動でのような新しい結果配列を作成することによって、これを達成でき

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はこれに対応した組み込みのソリューションを提供していますか?私は複雑さを(スピード/メモリ使用量のように)できるだけ低く保つことを試みています。これは、配列インデックスとしてSELECTからの第1列を使用して、列からその列を削除すること

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

答えて

1

あなたがフェッチモードPDO::FETCH_UNIQUEを使用することができます。その列(id)を保持したい場合は、それを2回選択する必要があります。

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); 
} 
+0

魅力的な作品です!ちょうど追加する: 'unique_key 'が必要ではなかった、それはその部分なしで完璧に動作するようだ。 – user2015253

関連する問題