У меня есть 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.
то, что вы пробовали, выглядит хорошо. в старой и устаревшей библиотеке 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;
}
}
PHP не имеет функции mysql_fetch, которая предоставляет сразу все строки, которые можно использовать в образе foreach.
Попробуйте получить все строки в одном цикле и построить массив со всеми строками. Затем, итерации по этому массиву и выполнения операций, как вы описали.
По его мнению, цель вашего цикла - просто переименовать некоторые столбцы таблицы.
Просто делать:
<?php
$categories_array = mysqli_query( mysqli_fetch_assoc($con,"SELECT categories_id AS id, categories_name AS text FROM categories ORDER BY categories_name") );
?>
while
?