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