цикл while не увеличивается

#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 всегда одинаковы, поэтому после завершения замены заменять больше нечего. Вам нужно использовать уникальные ключи, чтобы заставить его функционировать должным образом.