[php] 이 코드는 왜 문자 A에서 Z까지 인쇄하지 않습니까?

<?php
for ($i = 'a'; $i <= 'z'; $i++)
    echo "$i\n";

이 스 니펫은 다음 출력을 제공합니다 (줄 바꾸기는 공백으로 바 space).

abcdefghijklmnopqrstu vwxyz aa ab ac ad ae a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn dn do dp dq dr ds dt 뒤 dv dw dx dy dz ea eb ec ed ee ef 예



답변

로부터 문서 :

PHP는 C가 아닌 문자 변수에 대한 산술 연산을 처리 할 때 Perl의 규칙을 따릅니다.

예를 들어 Perl에서는 'Z'+1으로 'AA', C 에서는 ( , ) 'Z'+1로 바뀝니다 .'['ord('Z') == 90ord('[') == 91

문자 변수는 증가 할 수 있지만 감소 할 수 없으며 일반 ASCII 문자 (az 및 AZ) 만 지원됩니다.

주석에서 :-
또한<=사전 사전 비교라는점에 유의해야합니다'z'+1 ≤ 'z'. (이후'z'+1 = 'aa' ≤ 'z'그러나이.'za' ≤ 'z'처음 인 비교는 false입니다.) 속보 때$i == 'z'예를 들어, 작동합니다.

여기에 예가 있습니다 .


답변

일단 ‘z’에 도달하면 (그리고 이것이 범위 내에서 유효한 결과이고, $ i ++는 순서대로 다음 값으로 증가시킵니다), 다음 값은 ‘aa’입니다. 알파벳순으로 ‘aa’는 < ‘z’이므로 비교는 절대 이루어지지 않습니다.

for ($i = 'a'; $i != 'aa'; $i++)
    echo "$i\n"; 


답변

다른 답변은 게시 된 코드의 관찰 된 동작을 설명합니다. 원하는 것을 수행하는 한 가지 방법이 있습니다 (그리고 더 깨끗한 코드, IMO).

foreach (range('a', 'z') as $i)
    echo "$i\n";

범위 함수 에 대한 ShreevatsaR의 의견 / 질문에 대한 응답으로 : “올바른 종점”을 생성합니다. 즉 함수에 전달 된 값이 범위에 있습니다. 위 코드의 결과는 다음과 같습니다.

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z


답변

다른 사람들은 PHP가 왜 당신이 기대하는 것을 보여주지 않는지 이미 말했습니다. 원하는 결과를 얻는 방법은 다음과 같습니다.

<?php
for ($i = ord('a'); $i <= ord('z'); $i++)
    echo chr($i);
?>


답변

왜 사용하지 range('a','z')않습니까?


답변

이 코드를 사용해보십시오. 이 코드가 도움이 될 것입니다.

$alphas = range('A', 'Z');
foreach($alphas as $value){
    echo $value."<br>";
}

26 개의 문자를 순서대로 표시합니다.


답변

<?php

$i = 'a';
do {
echo ($j=$i++),"\r\n";
} while (ord($j) < ord($i));

?>