автоинкремент — непредвиденное поведение с strnatcmp () переполнение стека

Я пытаюсь получить функцию для увеличения альфа вверх в PHP, скажем, 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

Кто-нибудь знает, что здесь происходит? или, возможно, другой подход к моей проблеме.
Спасибо

3

Решение

Это работает, но останавливается на 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;
}
1

Другие решения

Это должно работать для вас:

<?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 />";
0

По вопросам рекламы [email protected]