为什么条件在 php 满足后没有返回?

Why is the condition not returning after it met on php?

我想出了以下代码:

<?php
if (block_rows('option') : while ( block_rows( 'option' ) ) : block_row( 'option' ); 
                                
    if ( !isset($id) ) { // meet only on the first iteration
        $a = 1; 
    }
    elseif ( isset($id) && $id == block_sub_value('ID') ) {
        $a++;
    }
    elseif ( isset($id) && $id != block_sub_value('ID') ) {
        $a = 2;
    }

    $id = block_sub_value('ID');
?>

    <h1> Option - <?=$id;?> </h1> // prints only the ID
    <p> Sub Option - <?=$id . ' - ' . $a;?> <p> prints ID and the $a

<?php endwhile; endif;?>

我要构建的逻辑是:

我有一个列表,其中包含一些具有 $id 编号的 parent 标题和具有 parent $id 编号以及 $a 编号的 child 内容。类似于:

没看到效果好的地方其实是第一个条件。第一个 $a 以 2 开头,而不是 1,几乎就像在满足第一个条件后,函数继续测试其他人,替换 $a 值。我不知道为什么会这样。

一旦开始 while 循环并通过第一次迭代,isset($id) 为真,因此不会重置为 1

因此更改部分:

<?php
if (block_rows('option') : while ( block_rows( 'option' ) ) : block_row( 'option' ); 
                                
    if ( !isset($id) ) { // meet only on the first iteration
        $a = 1; 
    }
// the rest of the code

类似于:

<?php

// set initial $oldid to be a value which is not possible
$oldid="-100";

if (block_rows('option') : while ( block_rows( 'option' ) ) : block_row( 'option' ); 
                                
    if ( $oldid !=$id ) { // meet only on the first iteration
        $oldid=$id;
        $a = 1; 
    }
// the rest of the code (please further amend if logically requires)

这只是其中一种方式。希望它能给你一些想法