2014-11-18 4 views
3

PHP에서 alphas를 A-> ZZ 또는 AAA -> ZZZ로 위쪽으로 증가시키는 함수를 얻으려고합니다.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를 말하는 것처럼 –

관련 문제