【问题标题】:PHP FOR Iteration not iteratingPHP FOR迭代不迭代
【发布时间】:2019-06-04 12:18:39
【问题描述】:

有谁知道为什么 PHP 中的 for 循环没有按预期工作?请检查以下内容:

查看有关运营商的文档和谷歌:http://php.net/manual/en/language.operators.increment.php

<?php
    $a = "Z";
    $b = "AL";

    echo $a."<br>".$b."<br>";

for ($x = $a; $x <= $b; $x++) {
    echo "The number is: $x <br>";
} 

while(true){
    if($a == $b)break;
    echo $a."<br>";
    $a++;

}   

?>

for 循环没有迭代,而while 循环是。预期的输出应该从 Z-AL 迭代,while 循环正在执行此操作,但 for 循环没有迭代。

for 循环应该遵循 Perl 的迭代 (http://php.net/manual/en/language.operators.increment.php),但显然说 AL 不大于 Z

但是,当将这些字母转换为它们的数值时,for 循环将像处理整数一样工作。

【问题讨论】:

  • 你不能增加一个 string 变量。
  • 您的循环不会迭代,因为Z 不小于或等于AL
  • var_dump("Z" &lt;= "AL"); 输出false...
  • @arkascha 当然可以。增加 "Z" 并得到 "AA" -- 但比较仍然作为字符串完成,因此条件失败。
  • 你为什么要阅读 PERL 的文档?这是 PHP。

标签: php perl for-loop


【解决方案1】:

您的循环没有迭代,因为条件失败——“Z”大于“AL”。你可以使用strnatcmp() 来完成你想要的:

for ($x = $a; strnatcmp($x, $b); $x++) {
    echo "The number is: $x\n";
}

输出:

The number is: Z
The number is: AA
The number is: AB
The number is: AC
The number is: AD
The number is: AE
The number is: AF
The number is: AG
The number is: AH
The number is: AI
The number is: AJ
The number is: AK

[编辑] 实际上,呃,这甚至没有必要,只需检查不等式:

for ($x = $a; $x !== $b; $x++) {

请注意,这可能会给您一个错误,具体取决于您想要的输出是什么。如果您想再进行一次迭代,只需在循环之前敲击 $b,或者像您的示例中那样使用 while 循环。

【讨论】:

  • 嗨,谢谢,这两个都是好主意。但是,它们不会完全覆盖整个范围,因为您已经说过不包括 AL。问题本身可以分为两部分。为什么迭代返回 FALSE,何时应该返回 TRUE,以及如何使其工作(但第一个问题的答案将决定问题 2 的答案)。
  • 对,所以...在循环之前撞 $b 或在结束后使用带中断的无限循环。轻松修复。
  • 它应该返回true。 'AL' 在'Z' 之前排序。您可以使用strnatcmp() 在“AL”之前进行“Z”排序,但您不需要这样做,因为仅检查等效性更容易且更便宜。
  • 你是对的,它在 Z 之前排序,但它不应该被视为一个字符串?特别考虑到 for 循环将需要一个变量来循环,你不能递增到一个单词, 仅适用于有效字母,因为它会在满足规则时用于递增/递减和中断。
猜你喜欢
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 2021-08-18
  • 2012-01-05
  • 2021-04-27
  • 1970-01-01
相关资源
最近更新 更多