PHP получает базу данных MySQL в виде ассоциативного массива по строке

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

У меня есть простая таблица базы данных MySQL, которую я загружаю в массив PHP. Я бы хотел id , чтобы столбец таблицы MySQL (который автоматически увеличивается, но я не думаю, что это имеет значение) был ключом массива для каждого элемента массива PHP, вместо того, чтобы массив был числовым.

Вместо этого:

 Array(
  Array(id=>'1', field1=>someval, field2=>val),
  Array(id=>'2', field1=>val, field2=>otherval),
  Array(id=>'4', field1=>val, field2=>otherval)
)
  

Я хочу это:

 Array(
  1=>Array(field1=>someval, field2=>val),
  2=>Array(field1=>val, field2=>otherval),
  4=>Array(field1=>val, field2=>otherval)
)
  

Мне все равно id , остается ли в ассоциативном массиве для каждой строки.

Есть ли способ сделать это, не перебирая исходный массив MySQL и не затрачивая много времени на обработку?

Ответ №1:

Вы можете сделать это во время выборки следующим образом:

 $query_ret = mysql_query(...);
$result = array();
while ($row = mysql_fetch_assoc($query_ret)) {
    $result[array_shift($row)] = $row;
}
  

Комментарии:

1. @Hammerite Не прочитал вопрос? Я думаю, что исходный массив MySQL, который означает OP, является массивом $result после цикла выборки, вы можете создать его во время цикла выборки, а не в другом цикле, чтобы изменить его после цикла выборки, цикл выборки является обязательным, не так ли?

2. Когда OP говорит «исходный массив MySQL», он имеет в виду объект результата MySQL, содержащийся в вашем $result . Он запрашивает способ достижения конечного результата вашего кода, но без использования while цикла в вашем коде. Но поскольку ваша интерпретация является результатом (того, что я считаю) непонимания, а не неспособности прочитать вопрос, я удаляю свой downvote.

3. Оказывается, я не могу удалить свой downvote, потому что я разместил его слишком давно.

Ответ №2:

«Есть ли способ сделать это, не перебирая исходный массив MySQL и не затрачивая много времени на обработку?»

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

Ответ №3:

Если у вас есть PDO, вам обязательно следует посмотреть пример # 3 из документации PDO для fetchall: http://www.php.net/manual/en/pdostatement .fetchall.php#example-1022

Это не только более эффективное использование памяти и вычислительной мощности вашего сервера… это также позволит вам воспользоваться несколькими другими мощными API PDO.