繁体   English   中英

strnatcmp()PHP出现意外行为

[英]Unexpected behavior with strnatcmp() PHP

我正在尝试使用一个函数来增加PHP中的alphas,例如A-> ZZ或AAA - > ZZZ,其中包含所有变量,即。 A,B,C ...... AA,AB,AC..ZX,ZY,ZZ等。

以下代码有时会起作用,但在某些情况下会中断,此示例可以正常工作。

$from = "A";
$to = "ZZ";

while(strnatcmp($from, $to) <= 0) {           
    echo $from++;
}

虽然这不能按预期工作。

$from = "A";
$to = "BB";

while(strnatcmp($from, $to) <= 0) {
    echo $from++;
}

输出是:

First: A B C D .. AA AB AC .. ZX ZY ZZ
Second: A B

有谁知道这里发生了什么? 或者对我的问题采取不同的方法。 谢谢

这可行,但它停在BA ...所以你可以说$to = 'BC'; 或者你可以投入$to++; 在你宣布$to之后。

$from= 'A';
$to = 'BB';
while ($from !== $to) {
    echo $from++;
}

$from= 'A';
$to = 'BB';
$to++;
while ($from !== $to) {
    echo $from++;
}

如果您使用的是PHP 5.5,则可以使用生成器。

function alphaRange($from, $to) {
    ++$to;
    for ($i = $from; $i !== $to; ++$i) {
        yield $i;
    }
}

foreach (alphaRange('A', 'BB') as $char) {
    echo $char;
}

这应该适合你:

<?php

    $from = "AA";
    $to = "BB";

    while(strnatcmp($from, $to) <= 0)           
        echo $from++ . "<br />";

?>

输出是:

AA...BB

如果你也想要字母表,那么在上面的代码之前复制它:

$from = "A";
$to = "Z";

while(strnatcmp($from, $to) <= 0)           
    echo $from++ . "<br />";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM