заменить цикл while на foreach

0

У меня есть php-код:

$categories_query = tep_db_query("select categories_id, categories_name from categories order by categories_name");
while ($categories = mysql_fetch_array($categories_query)) {
$categories_array[] = array('id' => $categories['categories_id'], 'text' => $categories['categories_name']);
}

вопрос в том, как я могу заменить цикл while, например, foreach, поэтому я могу сначала получить массив mysql, затем я хочу отредактировать некоторые значения, а затем передать его в цикл? Я пробовал разные версии циклов, но они не дают мне того же результата, что и цикл while.

  • 0
    Что-то не так с while ?
  • 1
    Не используйте функции [mysql] больше. Они устарели, переходите на mysqli или pdo
Показать ещё 1 комментарий
Теги:
for-loop
foreach
while-loop

3 ответа

0
Лучший ответ

то, что вы пробовали, выглядит хорошо. в старой и устаревшей библиотеке mysql нет функции "получить все". вы должны переключиться на mysqli или PDO.
в PDO вы можете просто взять все результирующие данные с помощью $statement->fetchAll() например.

если вы все еще хотите решить свою проблему со старой библиотекой mysql, тогда:

$categories_query = tep_db_query("select categories_id, categories_name from categories order by categories_name");
while ($categories = mysql_fetch_array($categories_query)) 
{
    $categories_array[] = array('id' => $categories['categories_id'], 'text' =>     $categories['categories_name']);
}

// do something with your $categories_array here

foreach($categories_array AS $array => $row)
{
    // you can output / access each row here e.g. with: $row['id']
    // or you can do a second foreach-loop for the columns:
    foreach($row AS $col => $data)
    {
        echo $data;
    }
}
  • 0
    В первом цикле foreach я просто помещаю "category_array2 [] = $ row;" так что конечный результат точно такой же, как цикл while, но теперь я могу предварительно отредактировать свои действия перед выполнением цикла for, спасибо!
1

PHP не имеет функции mysql_fetch, которая предоставляет сразу все строки, которые можно использовать в образе foreach.

Попробуйте получить все строки в одном цикле и построить массив со всеми строками. Затем, итерации по этому массиву и выполнения операций, как вы описали.

  • 0
    хорошо, помещая строки результата в массив, является тем, что он делает прямо сейчас.
  • 0
    хорошо, но должен быть второй цикл для выполнения желаемых операций.
Показать ещё 1 комментарий
0

По его мнению, цель вашего цикла - просто переименовать некоторые столбцы таблицы.

Просто делать:

<?php
  $categories_array = mysqli_query( mysqli_fetch_assoc($con,"SELECT categories_id AS id, categories_name AS text FROM categories ORDER BY categories_name") );
?>
  • 0
    Моя проблема немного сложнее. это то, как код выглядел раньше, но проблема в том, что весь этот код находится внутри другого цикла. поэтому я пытаюсь избавиться от запроса к базе данных в цикле и заменить его массивом, чтобы сделать его быстрее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню