【问题标题】:How to reverse a PHP while loop including incremental numbers starting with last number of varying length?如何反转 PHP while 循环,包括从不同长度的最后一个数字开始的增量数字?
【发布时间】:2018-08-14 21:04:36
【问题描述】:

我有一个有效的 php 代码,它使数字循环从 1 开始计数。

<?php

$i = 0; // define number

  while (have_rows('the_rows')) : row(); // begin while loop

  $i++; // increase increment with each loop ?>

  <div>
     <?php echo $i; // outputting the number ?>
  </div>

<?php 
    endwhile; // end while loop 
?>

此代码将遍历所有可用条目并在没有更多条目后停止。它将为每个 $i 输出计数。

例如,它可能看起来像这样:

<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>

没有预设号码。它可以是任何数字,包括 1、5、74 或 938 个条目。循环将继续到所有条目,并在所有条目完成后停止。

如果我从一个开始,这很好。但由于数字不固定,向后循环有点困难。

我怎样才能反转这个循环,以便首先倒数计数(例如,如果有 7 行,它从 7 倒数),并从最后一行开始反转循环?

例如

<div>7</div>
<div>6</div>
<div>5</div>
<div>4</div>
<div>3</div>
<div>2</div>
<div>1</div>

【问题讨论】:

  • 什么是row()?在您知道从哪个数字开始之前,需要有一种方法可以将行数或所有行数放入一个数组中。
  • 请注意:没有 mysql 访问权限。只需 PHP 代码。
  • 为简单起见,我没有发布整个复杂的代码页面,这会使问题变得复杂。 row() 就是在 php 代码中获取我的行的位置。它检查行是否存在,如果存在则发布下一行。
  • while 循环在row() 完成获取其条目后如何终止?
  • @JonathanLam endwhile .

标签: php loops increment reverse


【解决方案1】:

如果不知道数据的长度,则获取数据的长度,然后打印出来,反之。

<?php
  $i = 0;
  while(has_rows('the_rows')):
    row();
    $i++;
  endwhile;

  while($i > 0):
?>

  <div><?php echo $i--; ?></div>

<?php endwhile; ?>

【讨论】:

  • 我没有把所有的代码都加进去。还有很多代码,为了问题的简单,我把代码缩短了。
  • 您的代码将如何输出完整的增量?您在循环之外和行之外回显了 $i
  • @asegfvawer 我不知道还有更多代码。您可能想在代码中添加省略号或提及
  • @asegfvawer “输出全部增量”是什么意思?您的代码所做的只是按递增顺序打印出数字,直到数组的长度;我的代码正好相反(打印从数组长度到零的数字。我不确定你想要什么。
  • @asegfvawer 第二个while循环是颠倒第一个while的顺序。它以相反的顺序遍历元素。
【解决方案2】:

在事先不知道行数且不循环两次的情况下,您有多种选择。

一种是建立一个数组并反转它:

<?php
$i = 0;
while (have_rows('the_rows')) : row();
    $i++;
    $html[] = "
    <div>
     $i
    </div>";
endwhile;
echo implode(array_reverse($html));

或者将每一个添加到一个数组中:

<?php
$i = 0;
while (have_rows('the_rows')) : row();
    $i++;
    $html = "
    <div>
     $i
    </div>";
    array_unshift($data, $html);
endwhile;
echo implode($data);

或将新字符串添加到现有字符串之前:

<?php
$i = 0;
$html = "";
while (have_rows('the_rows')) : row();
    $i++;
    $html = "
    <div>
     $i
    </div>$html";
endwhile;
echo $html;

但是这看起来像 WordPress 或其他东西,所以我认为有一种方法可以在循环之前获取行数。

【讨论】:

  • 进一步查看后,我喜欢您的代码,并准备尝试一下。看起来这可能是一个很好的解决方案。我会在几分钟内尝试后发布更新。
  • 例如1,$data在哪里?我看到它输出,但它在哪里定义?另外,你可以在$html里面添加php而不需要打开和关闭php或者将html转成php?
  • 啊,更有意义,我以为你可能会输出$html,但不确定因为你写了$data。感谢您解决这个问题。
  • 如何在$html 中同时包含html 和php?我试过了,但看起来我不能将 php 和 html 都放在数组中而不用关闭标签或者将 html 转换为 php。
  • Edit 我认为问题是因为我里面有单引号和双引号,html 例如双引号class="" 和单个用于 php,例如item('an_item')。我需要将这个多样化的代码放入数组中。怎么做?我可以将数组转换为使用单个$html[] = ' 并转义其中使用与item(\'an_item\') 相同的php吗?还是别的什么?
猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多