2014-11-18 5 views
3

Я пытаюсь получить функцию, чтобы увеличивать альфы вверх в PHP, скажем, A-> ZZ или AAA -> ZZZ со всеми изменениями между ними, т.е. A, B, C ... AA, AB, AC..ZX, ZY, ZZ и т. Д.Неожиданное поведение с strnatcmp() PHP

Следующий код иногда работает, но затем разрывается в некоторых случаях, этот пример отлично работает.

$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 

знает любой, что здесь происходит? или, может быть, другой подход к моей проблеме. Благодаря

+0

Какой выход вы ожидаете? – Rizier123

+0

Как и первый пример, все вариации между ними. A, B, C ... AA, AB, AC ... BA, BB –

+0

Я предполагаю, что это говорит о том, что B == BB, но это не имеет смысла? –

ответ

1

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

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

<?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

вход от пользователя будет любой вещью между A и ZZZZZ, мне нужно иметь возможность генерировать все комбинации между двумя входами. Например, скажем, AZT и ZPTSR, например –

 Смежные вопросы

  • Нет связанных вопросов^_^