<?php
for ($i = 'a'; $i <= 'z'; $i++)
echo "$i\n";
Ten fragment kodu daje następujące wyniki (znaki nowej linii są zastępowane spacjami):
abcdefghijklmnopqrstu vwxyz aa ab ac ad ae af ag ah ai aj ak al am ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bb bi bj bk bl bm bn bo bp bq br bs bt bb bv bw bx przez 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 dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ex ... on to yz
$c = 'a';
chodzi o to, że w C występuje typ char (symbol znaku 1), ale nie w PHP, jeśli powiesz PHP$c = 'a';
- oznacza to, że jest to ciąg zawierający tylko 1 znak. Dlatego U nie może poprawnie przechodzić przez 28 znaków w PHP. Mam nadzieję, że każdy programista nauczy się języków niskiego poziomu i pisania na klawiaturze, nie zapominając o praktykach matematycznych, które pomogą im być silniejszym.==
lub!=
), sprawdź tę odpowiedź na powiązane pytanie .Odpowiedzi:
Z dokumentów :
Z komentarzy: -
Należy również zauważyć, że
<=
jest to porównanie leksykograficzne, więc'z'+1 ≤ 'z'
. (Od'z'+1 = 'aa' ≤ 'z'
. Ale'za' ≤ 'z'
porównanie jest po raz pierwszy fałszywe.) Na przykład przerwanie, kiedy$i == 'z'
zadziałałoby.Przykład tutaj .
źródło
ord()
więc nigdy tego nie zauważyłem.'aa'
jest leksykograficznie mniejszy'z'
, dlatego pętla trwa. I zatrzymuje się,'yz'
ponieważ'za'
jest większy niżz
. Sprawdź ten przykład .Ponieważ po osiągnięciu „z” (i jest to prawidłowy wynik w twoim zakresie, $ i ++ zwiększa go do następnej wartości w sekwencji), następną wartością będzie „aa”; a alfabetycznie „aa” to <„z”, więc porównanie nigdy nie jest spełnione
źródło
Inne odpowiedzi wyjaśniają obserwowane zachowanie opublikowanego kodu. Oto jeden ze sposobów robienia tego, co chcesz (i to czystszy kod, IMO):
W odpowiedzi na komentarz / pytanie ShreevatsaR dotyczące funkcji zakresu : Tak, tworzy „właściwy punkt końcowy”, tzn. Wartości przekazywane do funkcji znajdują się w zakresie. Aby to zilustrować, wynik z powyższego kodu był następujący:
źródło
Inni już powiedzieli, dlaczego PHP nie pokazuje tego, czego oczekujesz. Oto, w jaki sposób możesz uzyskać pożądany wynik:
źródło
Dlaczego nie po prostu użyć
range('a','z')
?źródło
Wypróbuj ten kod. Myślę, że ten kod będzie ci pomocny.
Wyświetlaj 26 liter po kolei.
źródło
źródło
Można to również wykorzystać:
źródło
PHP ma funkcję zapętlania liter i może przekraczać pojedyncze znaki; reszta zostanie wykonana w ten sposób: aa ab ac ... zz i tak dalej.
Spróbuj tego:
źródło
Chociaż powyższe odpowiedzi są wnikliwe w to, co się dzieje, i dość interesujące (nie wiedziałem, że tak się zachowa i dobrze jest zrozumieć, dlaczego.
Najłatwiejszym rozwiązaniem (choć może nie najbardziej znaczącym) jest zmiana warunku na $ i! = 'Z'
źródło
PHP nie uważa, że „AA” jest mniejsze niż „Z”. Najlepszym sposobem na to jest:
ABCDEFGHIJKLMNOPQRSTU VWXYZ
źródło
Być może ten kod będzie działał. To proste i zrozumiałe:
gdzie 26 to całkowita liczba liter w alfabecie.
źródło
Wow, naprawdę nie wiedziałem o tym, ale to nie jest duży kod, możesz wypróbować echo „z” po pętli. Mark ma absolutną rację. Używam jego metody, ale jeśli chcesz alternatywy, możesz również spróbować
źródło