#php #arrays #for-loop #while-loop
#php #массивы #for-цикл #цикл while
Вопрос:
Существует странная проблема: мой цикл while не увеличивается, как при отображении первой категории, но не остальных, как это:
class temp
{
var $file;
function new_list($forum_list)
{
foreach($forum_list as $key => $value)
{
$this->file = str_replace('{'.$key.'}', $value, $this->file);
}
return $this->file;
}
function display()
{
echo $this->file;
}
}
$temp = new temp();
// mysql query
while ($row_cat = mysql_fetch_array($cat)){
$temp->new_list(array(
'CAT_TITLE' => $row_cat['title'],
'CAT_DESCRIPTION' => $row_cat['description']
));
$cid = $row_cat['id'];
// mysql query
while ($row_forum = mysql_fetch_array($forum)){
$temp->new_list(array(
'FORUM_TITLE' => $row_forum['title'],
'FORUM_DESCRIPTION' => $row_forum['description']
));
}
}
$temp->display();
теперь я создал механизм шаблонов, и он использует array как обычно, но отображает категорию, ее описание и подкатегорию и ее описание только один раз, это первая запись, почему это так, я сделал что-то не так?
РЕДАКТИРОВАТЬ: я добавил код движка шаблонов, он перехватывает файл и использует метод file_get_contents, а затем преобразует ключи в значения, и когда я использую его без движка, он работает нормально, но с движком он показывает только первый столбец.
Комментарии:
1. Я подозреваю, что ошибка заключается в том, что вы на самом деле не связываете категорию с форумом в $ temp. Можете ли вы опубликовать код либо для временного класса, либо для системы шаблонов?
2. Я отредактировал и опубликовал полный код.
3. мигание 1.
new_list()
возвращает что-то. 2.new_list
выполняетstr_replace
для $ var, но отправляемые ему ключи всегда являются одними и теми же 4 ключами…
Ответ №1:
Попробуйте упростить его, чтобы найти ошибку. Я не вижу проблемы с тем, что вы опубликовали, но я подозреваю, что есть ошибка в логике кода, который вы не опубликовали. Попробуйте это:
<-- mysql query -->
while ($row_cat = mysql_fetch_array($cat)){
echo $row_cat['title']."<br/>";
$cid = $row_cat['id'];
<-- mysql query -->
while ($row_forum = mysql_fetch_array($forum)){
"-".$row_forum['title']."<br/>";
}
}
Обновить:
Да: вот в чем ваша проблема: $this->file = ...
перезаписывает $file каждую итерацию. Вам нужно объединить результат (добавить строки вместе с a . ) что-то вроде этого:
$this->file = $this->file . str_replace('{'.$key.'}', $value, $this->file);
Комментарии:
1. Да, когда я использую это, это работает хорошо, но не с шаблонизатором, я отредактирую свой вопрос и также опубликую код шаблонизатора. Спасибо
2. Привет @Keshav, я обновил свой ответ для вас. При проверке ошибок в будущем постарайтесь упростить код и сузить проблему.
3. На этот раз все происходит более странно: сначала отображаются значения, которые я ввел в html-документе, затем заголовок категории, затем описание категории, затем и заголовок, и описание, и так далее с подкатегориями.
4. Извините, я не заметил, что ваш str_replace на самом деле запущен в $this->file . Попробуйте
$this->file = $this->file . $value
, и вы увидите, что это работает лучше, но, вероятно, не так, как вы хотите. Как упоминал кхез, ваши $keys всегда одинаковы, поэтому после завершения замены заменять больше нечего. Вам нужно использовать уникальные ключи, чтобы заставить его функционировать должным образом.