php foreach выполняет цикл только один раз с данными dynamica

#php #mysql #foreach #while-loop #str-replace

#php #mysql #foreach #цикл while #str-replace

Вопрос:

Я бы хотел, чтобы выходные данные отображались следующим образом:

категория 1, подкатегория1.1, подкатегория1.2

категория 2, подкатегория2.1, подкатегория2.2

И т.д…

Я полагаю, что это проблема с str_replace () Я не уверен, в чем проблема, может кто-нибудь протянуть руку помощи?

Вот код:

 class temp 
{
var $file;

function get_file($temp){
$this->file = get_file_contents($temp)
return $this->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();

$temp->get_file('file.html');

mysql_select_db($database_config, $config);
$query_cat = "SELECT * FROM category ORDER BY dsp ASC";
$cat = mysql_query($query_cat, $config) or die(mysql_error());

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_select_db($database_config, $config);
$query_cat = "SELECT * FROM subcategory WHERE cid={$cid}";
$subcat = mysql_query($query_subcat, $config) or die(mysql_error());

    while ($row_subcat = mysql_fetch_array($subcat)){
        $temp->new_list(array(
            'SUBCAT_TITLE' => $row_subcat['title'],
            'SUBCAT_DESCRIPTION' => $row_subcat['description']));
    }
}
$temp->display();
  

Комментарии:

1. Если база данных настроена правильно, вы должны быть в состоянии извлекать категории из базы данных так, как вы хотите, чтобы они отображались. Я бы отсылал вас к этому: dev.mysql.com/tech-resources/articles/hierarchical-data.html

2. я тоже пробовал это, но не работает, и у меня есть много похожих имен для полей в обеих таблицах, таких как title и description.

Ответ №1:

Одна проблема, которую я вижу, заключается в:

 $this->file = str_replace('{'.$key.'}', $value, $this->file);
  

Вы перезаписываете свою $file переменную на каждой итерации и, кроме того, вы никогда фактически не устанавливаете $file , поэтому, насколько я вижу, она должна быть пустой после запуска вашего кода.

Комментарии:

1. Вы правы. Я предполагаю, что эта строка выдает уведомление о ‘Неопределенной переменной’ или что-то в этом роде. 1

2. Извините, но я знаю, что это перезапись, как мне это исправить, я просто больше не могу об этом думать, и у меня не так много времени, чтобы взять выходной, а потом подумать об этом позже…

3. @wh1t3h4ck5 — Нет, он отображает значения только один раз, а затем выходит из цикла или перезаписывает только первую категорию один раз, просто нужен способ улучшить ее и отобразить должным образом…

Ответ №2:

Если я правильно понял ваш вопрос, то вам нужно добавить выходные данные str_replace в другую переменную, а не в исходный $ file:

 class temp 
{
var $file;
var $output;

  function new_list($forum_list)
  {
    foreach($forum_list as $key => $value)
    {
        $this->output .= str_replace('{'.$key.'}', $value, $this->file);
    }
    return $this->output;
  }

  function display()
  {
    echo $this->output;
  }
}
  

Комментарии:

1. нет, это не работает, вместо этого я даже не заменяю еще несколько переменных

2. Не могли бы вы тогда, пожалуйста, привести нам пример того, что находится внутри этого $file .

3. $file получает содержимое из file.html это похоже на: <h1>{CAT_TITLE}</h1><BR /> {SUBCAT_TITLE}

4. Прежде всего — работает ли часть запроса вашего скрипта? Если вы замените $temp->new_list часть на var_dump в обоих местах, даст ли это вам то, что вы ожидаете? Если это произойдет, то мой фрагмент тоже должен работать — он просто принимает $ file, заменяет части, соответствующие $ keys , а затем добавляет выходные данные к другой переменной $ output .

5. Кстати, вы продолжаете говорить о подкатегориях, но ваш запрос, похоже, не извлекает их из базы данных. Пожалуйста, отредактируйте свой вопрос с использованием образца фактического вывода из вашего скрипта.