如何检测变量是否跟随“false”语句;用于在PHP中设置动态编号列表


How to detect if a variable follows a "false statement" for setting up dynamic numbered lists in PHP

请原谅我糟糕的解释技巧。对PHP非常陌生。

所以我在页面的左侧建立一个动态编号列表。每个不同的任务都被放入它自己的数组中(由"name"answers"content"组成),所有任务都被放入由这些任务及其详细信息组成的数组中。任务及其顺序编号和名称将显示在左侧的侧边栏中,而内容将循环显示在页面的右侧(如果这还不够清楚,这是一个带有左侧侧边栏和右侧主内容窗口的页面)

$task0 = array('name' => 'Update status in CRM', 'content' => 'blargeyblarg');
$task1 = array('name' => "Pre Meeting Email:", 'content' => 'blargeyblarg2' );
$task2 = array('name' => "Welcome cover letter", 'content' => 'blargeyblarg3');
$task3 = array('name' => "Welcome email:", 'content' => 'blargeyblarg4');
$task4 = array('name' => "Initial Meeting Agenda", 'content' => 'blargeyblarg5');
$tasks = array($task0, $task1, $task2, $task3, $task4);

然而,当试图显示这个列表中任务的正确编号顺序时,我需要创建一个语句来查找以':'结尾的任务的任何'名称',因为它们将是'heading'任务,它们的样式略有不同,但与前面的任务具有相同的编号方案。

基本上,这个列表应该是:

1, 2, 3, 4, 5

<ul class="nav list-group">
			<?php foreach ($tasks as $i => $task) { ?>
				<?php
					$is_heading = ends_with($task["name"],":");
				?>
				<li class="list-group-item" tabindex="-1">
					<a class="listgroupwrap" href="#g<?= ++$i?>">
					</a>
                    <span class="step-number-container"> <?= +$i ?>
                    </span>
                        <span class="btn-check">
                            <i class="glyphicon glyphicon-ok"></i>
                        </span>
					<!--<span class="step-checkbox"></span>-->
                            <span class="step-name"><?php echo $task["name"] ?>
                                </span>
                                    <span class="step-show-hide">
                                            <span class="btn">
                                                <i class="glyphicon glyphicon-chevron-right">
												</i>
                                            </span>
                                    </span>
				</li>
				<?php if (!$is_heading): ?>
					<li class="list-group-item step-heading" tabindex="-1">
					<a class="listgroupwrap" href="#g<?= $i +1 ?>">
					</a>
					<span class="step-number-container"> <?= $i?></span>
					<span class="step-name"><?php echo $task["name"] ?>
                                </span>
				<?php endif; ?>
				</li>
			<?php } ?>

但是它显示的是

1, 1、2、3、3、4、5、5

总共应该只有5个任务。

我在这里做错了什么,除了明显的讨厌?

根据新信息改写答案

看了输出后,我明白你在说什么了。这并不是说循环为每个任务运行两次,而是说,对于某些任务(即,非标题),每个任务输出两行。

不管是否标头,下面的输出:

<li class="list-group-item" tabindex="-1">
    <a class="listgroupwrap" href="#g<?= ++$i?>"></a>
    <span class="step-number-container"> <?= +$i ?></span>
    <span class="btn-check">
         <i class="glyphicon glyphicon-ok"></i>
    </span>
    <!--<span class="step-checkbox"></span>-->
    <span class="step-name"><?php echo $task["name"] ?></span>
    <span class="step-show-hide">
            <span class="btn">
                  <i class="glyphicon glyphicon-chevron-right"></i>
            </span>
    </span>
</li>

这一行只有在它不是标题时才会得到输出:

<?php if (!$is_heading): ?>
    <li class="list-group-item step-heading" tabindex="-1">
        <a class="listgroupwrap" href="#g<?= $i +1 ?>"></a>
        <span class="step-number-container"> <?= $i?></span>
        <span class="step-name"><?php echo $task["name"] ?></span>
<?php endif; ?>
    </li>

两件事。首先,需要注意的是,最后一个</li>应该在if语句中。

其次,您需要另一个包含第一行的if语句,仅在if ($is_heading)时输出。

那就解决了