Как сделать массив или массив, который является результатом БД для индексации по идентификатору из таблицы без зацикливания? - PullRequest
2 голосов
/ 16 июля 2011

пример:

Array
(
 [0] => Array
    (
        ['user_id'] => 4567
        ['user_name'] => 'John Doe'
        ['city'] => 'NY'
        // and so on
    )


 [1] => Array
    (
        ['user_id'] => 3732
        ['user_name'] => 'Janet Smith'
        ['city'] => 'LA'
        // and so on
    )
 // and here many more rows

но мне нужно это:

Array
(
 [4567] => Array
    (
        ['user_id'] => 4567
        ['user_name'] => 'John Doe'
        ['city'] => 'NY'
        // and so on
    )


 [3732] => Array
    (
        ['user_id'] => 3732
        ['user_name'] => 'Janet Smith'
        ['city'] => 'LA'
        // and so on
    )
 // and here many more rows

Так что я могу получить доступ к данной строке по ее идентификатору.Единственный известный мне способ - это зациклить весь этот массив, который может быть огромным:

 foreach($array_from_db as $row) {
   $idexed_array_from_db[$row['user_id']] = $row;
 }

Есть ли другие способы достижения этого результата?

1 Ответ

1 голос
/ 16 июля 2011

Я не думаю, что PDO может сделать это напрямую.Существуют и другие оболочки, такие как ADODb с GetAssoc

  $array=$db->GetAssoc("select user_id,user_name,city from user");

Однако любая оболочка просто получает результат и создает массив, как вы описали в своем вопросе.Единственное отличие состоит в том, что ваше предложение сначала извлекает весь набор результатов в массив, а затем генерирует ваш ассоциативный массив из этого.

Если вы используете PDO, тогда более эффективным способом использования памяти будет считывание результатов.построчно и построим массив таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...