【问题标题】:PHP: Why are the first 3 array values printed over and over?PHP:为什么前 3 个数组值反复打印?
【发布时间】:2020-08-25 08:47:05
【问题描述】:

我是编程新手,正在尝试学习 PHP 以及 PHP 和 HTML 之间的代码分离。

我想用数组 ($list) 中的值替换 HTML 文件 ($replacehtml) 中的某些单词。 HTML 文件由一个表格行组成,其中包含要替换的 3 个值($ip、$date、$browser)。我想多次打印同一行(每次都使用数组中的新值),直到打印完数组中的所有值。但我的代码似乎一遍又一遍地打印前 3 个值,我不知道为什么。我确定我错过了一些东西,希望能得到一些帮助。

$list = array('ip1', 'date1', 'browser1','ip2','date2','browser2');

$n = 0;
   for ($i=0 ; $i < count($list)-1 ; $i++){

       if($n > count($list)-1){
           break;
       }
        $replacehtml = str_replace($ip, $list[$n], $replacehtml);
        $n++;
        $replacehtml = str_replace($date, $list[$n], $replacehtml);
        $n++;
        $replacehtml = str_replace($browser, $list[$n], $replacehtml);
        $n++;
        echo $replacehtml;
    }

我得到以下输出:

ip1 date1   browser1
ip1 date1   browser1

虽然它应该是:

ip1 date1   browser1
ip2 date2   browser2

【问题讨论】:

  • 此代码 sn-p 不完整,请提供其他信息,例如 $ip 和其他变量

标签: php arrays for-loop indexing echo


【解决方案1】:

为什么你定义了变量$i却从不使用它?然后通过增加变量$n 而不是使用有用的内置函数来复制for 循环的功能。

为了实现您想要的输出,我将使用以下更简单的代码:

$list = array('ip1', 'date1', 'browser1','ip2','date2','browser2');


for ($i = 0; $i < count($list); $i += 3){

  $replacehtml = str_replace($ip, $list[$i], $replacehtml);
  $replacehtml = str_replace($date, $list[$i + 1], $replacehtml);
  $replacehtml = str_replace($browser, $list[$i + 2], $replacehtml);

  echo $replacehtml;

}

这应该会达到您的预期输出。

【讨论】:

  • 谢谢,因为我还是新手,我一定错过了这个。我尝试使用 $i 但无法让它工作,所以我认为需要一个额外的变量。您的建议 + 下面的评论使我的程序正常工作,因为下面提到的覆盖仍然发生在这里。
【解决方案2】:

除了重复循环之外,主要问题来自覆盖您要替换的原始字符串...

$replacehtml = str_replace($ip, $list[$n], $replacehtml);

所以第二次循环时,$replacehtml 已经替换了所有值。

只需使用不同的变量将值放入并随后替换...

$newhtml = str_replace($ip, $list[$n], $replacehtml);

然后

$newhtml = str_replace($date, $list[$n], $newhtml);

等等。最后

echo $newhtml;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多