#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.