[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Цикл FOR, почему так?
KostyaBizon
$letter='y';//При значении от a до y выведется что нужно
for($i='a';$i<=$letter;$i++)
echo $i,'<br>';

но вот значение

$letter='z';//Выводятся значения до yz, хотя ожидалось только до z
for($i='a';$i<=$letter;$i++)
echo $i,'<br>';

вопрос: почему так?
Игорь_Vasinsky
цикл как то коряво делает

мож вот так сначала?

$abc = range('a','z')
;

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
linker
Насколько я понял, php в этом случае делает ord($i) и сравнивает с ord($letter), когда становится $i = 'z', при следующей итерации $i ++ даёт ord($i) равным меньше чем ord($letter) и потому цикл продолжает выполняться, пока наконец ord($i) не станет равным ord($letter).

_____________
Gear Framework
Gear Framework на Github
KostyaBizon

//Выводится значение до z
$letter="aa";
for($i="a";$i!=$letter;$i++)
echo $i,'<br>';

если по мануалу то мы получли нужный результат вывод алфавита от a до z,
но вот почему, при значение

$letter="z";//идет вывод до yz, а должен быть результат как в верху
for($i="a";$i!=$letter;$i++)
echo $i,'<br>';

и если я все правильно понял из мануала то счетчик допускает обработку буквенных(строковых) значений.
KostyaBizon
Цитата (linker @ 22.01.2014 - 12:35)
Насколько я понял, php в этом случае делает ord($i) и сравнивает с ord($letter), когда становится $i = 'z', при следующей итерации $i ++ даёт ord($i) равным меньше чем ord($letter) и потому цикл продолжает выполняться, пока наконец ord($i) не станет равным ord($letter).

Наверное именно так и происходит.
linker
Я не нашёл в мануале описания этого извращения. Опишу на пальцах
$letter = 'z'
шаг 1: $i = a сравнение ord(a) <= ord(z) верно значит echo $i
шаг 2: $i ++ = b сравнение ord(b ) <= ord(z) верно значит echo $i
шаг 3: $i ++ = c сравнение ord( c ) <= ord(z) верно значит echo $i
...
шаг n: $i ++ = z сравнение ord(z) <= ord(z) верно значит echo $i
шаг n+1: $i ++ = aa сравнение ord(aa) <= ord(z) верно значит echo $i
...
и т.д. пока сравнение ord($a) <= ord(z) будет истиной.

_____________
Gear Framework
Gear Framework на Github
KostyaBizon
Благодарю за ответы, все понял.
PS Про мануал комментарий вот этого пользователя Matthiaz
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.