Php 合并for和if语句

Php 合并for和if语句,php,Php,我一直在研究这是否可能,但我画了一个空白,我想知道是否有可能优化这些for和if语句?干杯 编辑(更新的#2):他们的问题是代码没有在页面中循环 <?php // calculate total number of pages $total_pages = ceil($total_rows / $records_per_page); // range of links to show $range = 2; // display links to 'range of pages' ar

我一直在研究这是否可能,但我画了一个空白,我想知道是否有可能优化这些for和if语句?干杯

编辑(更新的#2):他们的问题是代码没有在页面中循环

<?php
// calculate total number of pages
$total_pages = ceil($total_rows / $records_per_page);

// range of links to show
$range = 2;

// display links to 'range of pages' around 'current page'
$initial_num = $page - $range;
$condition_limit_num = ($page + $range)  + 1;
?>

    <ul class="pagination margin-zero">
<?php if ($page>1) : ?>
        <li>
            <a href='<?php echo $page_url; ?>page=1' title='Go to the first page.'>First Page</a>
        </li>
<?php endif; ?>

<?php
for ($x = min($initial_num, 0); $x <= max($condition_limit_num-1, $total_pages); $x++) :
    if ($x == $page) :
        ?>
        <li class='active'>
            <a href="#"><?php echo $x; ?> <span class="sr-only">(current)</span></a>
        </li>
    <?php else : ?>
        <li>
            <a href='<?php echo $page_url; ?>page=<?php echo $x; ?>'><?php echo $x; ?></a>
        </li>
        <?php
    endif;
endfor;
?>

<?php
if ($page<$total_pages) : ?>
        <li>
            <a href='<?php echo $page_url; ?>page=<?php echo $total_pages; ?>' title='Last page is <?php echo $total_pages; ?>'>
                Last Page
            </a>
        </li>
<?php endif; ?>
    </ul>


当然,如果您考虑到$x允许分配的最大值和最小值,您可以将它们组合起来

外部for循环需要在间隔[0;$condition\u limit\u num]中包含$x

如果您只查看for和first,如果您可以确定最小值必须大于零或initial_num,那么您可以例如使用initial_num和zero的最小值。使用最大条件限制和总页数作为最高可达值,即间隔[min($x,0);max,限制的工作方式相同($condition\u limit\u num-1;$total\u pages)]

但是如果你考虑到最里面的if,你需要$x有一个特定的值($page)。这意味着只要在区间[min($x,0);max($condition\u limit\u num-1;$total\u pages)]中包含$page,这个if就只有“true”——你可以将这个检查简化为一个if

问题更新后更新:

由于最里面的if也有else路径,因此循环不能简化为单个if:

<?php
for ($x = max($initial_num, 0); $x <= min($condition_limit_num-1, $total_pages); $x++)) :
    if($x == $page) :
        ?>
        <li class='active'>
            <a href="#"><?php echo $x; ?> <span class="sr-only">(current)</span></a>
        </li>
        <?php else : ?>
        <li>
            <a href='<?php echo $page_url; ?>page=<?php echo $x; ?>'><?php echo $x; ?></a>
        </li>
        <?php
    endif;
endfor;
?>

是的,这是可能的。@JonStirling这怎么办?干杯。@B001ᛦ上面的代码是有效的,我只是想知道如何去优化它,干杯。@HaveaLaugh,但这不是你要问的…@JonStirling对此表示抱歉,我的错误,这就是我要问的,我猜我的措辞是错误的,我会从错误中吸取教训,干杯。你只需要分别检查每个边界和相等,然后共同检查mbine条件-例如,您可以检查
如果($x>=min($initial_num,0))&&($x这将是一个有趣的问题(如何工作)代码与原始实现一起查看,因为最后一个if嵌套在for中,只选择了一个页面-该代码也不应该循环超过一个页面。我理解您的代码-您的for循环中真的有if($x==$page)吗?如果没有,那么您必须使用类似于
的for($x>=min($x>=min($initial_num,0);$x啊好了,现在我明白你内心的“如果”。我在之前的评论中输入了一个错误。它应该以($x=min(…
)的
开头,而不是($x>=…
)的
开头。你还可以将for back中的
if
缩减为if($x==$page)因为外部for循环满足了其他条件。由于for循环中未分配$x,脚本现在中断。只有当
$initial_num
为负时,才会出现这种情况。如果您实现分页,我想永远不会出现这种情况,您希望将其用作“基本”索引,以便使用
max($initial\u num,0)
或甚至
max($initial\u num,1)
如果下限没有第0页。如果在上限上,
$total\u pages
是绝对上限,$condition\u limit\u num是其中的一个选定范围,则应将其更改为
min($condition\u limit\u num-1,$total\u pages)
。这总是选择较窄的间隔。