【问题标题】:php foreach loops only once with dynamica dataphp foreach 仅使用动态数据循环一次
【发布时间】:2011-04-13 18:04:21
【问题描述】:

我希望输出显示如下:

类别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();

【问题讨论】:

  • 如果数据库设置正确,您应该能够以您希望它们显示的方式从数据库中提取类别。我建议您参考:dev.mysql.com/tech-resources/articles/hierarchical-data.html
  • 我也试过了,但没有用,而且我在两个表中的字段都有很多相似的名称,比如标题和描述。

标签: php mysql foreach while-loop str-replace


【解决方案1】:

我能看到的一个问题是:

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

您在每次迭代中都会覆盖您的 $file 变量,除此之外,您从未真正设置过 $file,据我所知,运行代码后它应该为空。

【讨论】:

  • 你是对的。我猜这行会引发“未定义的变量”通知或类似的东西。 +1
  • 对不起,但我知道它会覆盖我如何正确处理它,我只是想不出它,我没有太多时间休息一天,然后再考虑它。 ..
  • @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;
  }
}

【讨论】:

  • 不,它不起作用,我什至没有替换更多变量
  • 你能给我们举个例子,这个$file里面有什么。
  • $file 正在从 file.html 获取内容,类似于:

    {CAT_TITLE}


    {SUBCAT_TITLE}
  • 首先 - 你的脚本的查询部分有效吗?如果您在两个位置都将$temp->new_list 部分替换为var_dump,它会给您带来什么,您期望什么?如果是这样,那么我的 sn-p 也应该可以工作 - 它只需要 $file,替换匹配 $keys 的部分,然后将输出附加到另一个变量 $output
  • 顺便说一句,您一直在谈论子类别,但您的查询似乎没有从数据库中获取它们。请使用脚本的实际输出示例编辑您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2023-04-11
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2017-01-13
  • 2023-03-03
相关资源
最近更新 更多