首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heredoc while循环,递减2而不是1

Heredoc while循环,递减2而不是1
EN

Stack Overflow用户
提问于 2016-02-20 07:50:38
回答 3查看 83关注 0票数 0

我的while循环递减2,我找不到原因。

我觉得我不明白PHP是如何与HTML交互的。

有什么清晰的词语吗?(请注意,字典的索引从1开始)

代码语言:javascript
复制
if (isset($title)) { 
    $i = sizeof($title);

    while ($i > 0) {
        $idnum = intostring($i); 
        $titletoadd = $title[$idnum];
        $summarytoadd = $summary[$idnum];

        $podcastblock =<<<EOD
        <div class="podcast" id="podcast$idnum">
         <p class="podcasttitle" id="podcasttitle$idnum">$titletoadd</p>
         <div class="container column horizontal-spaced ">
         <p class="podcastnumber left shrink " id="podcastnumber$idnum">$i</p>
         <p class="summary grow" id="summary$idnum">$summarytoadd</p>
         </div>
          <audio class="audioplayer tile displaymiddle wide"  id='audioplayer$idnum" controls>
          <source src="audiofiles/p$i.mp3" type="audio/mpeg">
        </audio>

        EOD;

        echo $podcastblock; 
        $i--;
    }
EN

回答 3

Stack Overflow用户

发布于 2016-02-20 08:18:59

您在这一行中有一个打字错误:

代码语言:javascript
复制
<audio class="audioplayer tile displaymiddle wide"  id='audioplayer$idnum" controls>

id属性值以单引号开头,然后以双引号结束。因此,直到下一个<audio元素之前的所有内容都被用作id的一部分,而不是单独的HTML元素。所以你只能看到所有其他的DIV

更改为:

代码语言:javascript
复制
<audio class="audioplayer tile displaymiddle wide"  id="audioplayer$idnum" controls>
票数 1
EN

Stack Overflow用户

发布于 2016-02-20 07:54:08

首先,删除这个特定的代码$idnum = intostring($i);你不需要这个。将其更改为$idnum = $i;

如果您尝试用10或更多元素填充$title数组,它实际上并不是递减两个。通过这种方式,您可以观察正在发生的事情

以下是你的错误:

代码语言:javascript
复制
$title = array("title1", "title2");

/* The array starts from 0 index then 1, 2 and so on
once you get the size of the array it
just counts the elements in the array
but not really knowing the last index */

$i = sizeof($title);

/* in this case our $i have now the value of 2
$title[2] does not exists because we only have two elements
namely $title[0] and $title[1]... this is your first mistake */

// second mistake:

while ($i > 0)

/* our array starts from zero, with this condition,
you're basically skipping zero index (beginning of the array) */

// to fix these you need to put the following codes

$i = (count($title) - 1); /* use count instead of sizeof but they are completely the same...
subtract 1 to the total count to get the last index of the array */

while ($i >= 0) // lastly include the 0 index

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2016-02-20 08:34:49

这段代码中没有任何东西会导致$i递减2。如果发生额外的递减,那么它必须在intostring()方法中。

然而,这里还发生了一些其他问题。您的html中有一个不可靠的单引号,并且缺少结束的div标记。我可以提出一些建议来清理一下这个问题。

  1. 对于封装在PHP语言中的HTML代码块,如果以单引号开始和结束,在HTML元素中使用全双引号,并使用字符串连接显式地注入PHP变量,则更容易理解PHP是如何与HTML交互的。$variable。‘
  2. 您不必将$i转换为字符串,PHP将为您处理。
  3. 我认为在这种情况下,$i循环会更清晰一些,并且它使代码的意图更清晰。

试试这个:

代码语言:javascript
复制
$title = array("Title1","Title2","Title3");
$summary = array("Summary1","Summary2","Summary3");

if (isset($title)) {

    for ($i= count($title); $i > 0; $i--) {
        $titletoadd = $title[$i];
        $summarytoadd = $summary[$i];

        $podcastblock = '
        <div class="podcast" id="podcast'. $i .'">
            <p class="podcasttitle" id="podcasttitle'. $i .'">'. $titletoadd .'</p>
            <div class="container column horizontal-spaced ">
                <p class="podcastnumber left shrink " id="podcastnumber'. $i .'">'. $i .'</p>
                <p class="summary grow" id="summary'. $i .'">'. $summarytoadd .'</p>
            </div>
            <audio class="audioplayer tile displaymiddle wide" id="audioplayer'. $i .'" controls>
                <source src="audiofiles/p'. $i .'mp3" type="audio/mpeg">
            </audio>
        </div>';

        echo $podcastblock;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35517185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档