Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > РАНДОМ


Автор: kilogram 11.5.2012, 15:31
Читаю тему случайные числа в книге, там такой пример, не работает чего-то.


Код

<?php

$ourfile = fopen("largetextfile.txt",'r');
for($i = 0; $s = fgets($ourfile,10000); $i++){
    if(mt_rand(0,$i) == 0) $line = $s;
}
echo $line;
?>


Автор: kilogram 11.5.2012, 16:25
Объясните вот это действие:
Код
if(mt_rand(0,$i) == 0) $line = $s;


Непонятно, зачем присваивать переменную s? Что это дает?

Ещё, как можно выводить $line если он объявлен внутри цикла фора, а не за её пределами?

Автор: Aliance 11.5.2012, 18:10
Код не работает возможно потому, что у тебя нет файла largetextfile.txt или его содержимое задано не верно.
А возможно потому, что учебник плохой.

Цитата(kilogram @  11.5.2012,  17:25 Найти цитируемый пост)
Непонятно, зачем присваивать переменную s? Что это дает?

В цикле переменная один или несколько раз перезадается, при выполнении условия if, а затем при выходе из цикла печатается (по факту печатается переменная $s, которая удовлетворила условию if последняя).

Цитата(kilogram @  11.5.2012,  17:25 Найти цитируемый пост)
как можно выводить $line если он объявлен внутри цикла фора, а не за её пределами? 

В php переменные объявляются в месте их первого включения в скрипт.

Автор: Sentox 11.5.2012, 22:40
Стоит использовать нормальную IDE с дебагером, очень помогает в поиске ошибок.

Автор: Guedda 15.5.2012, 07:28
Sentox, о чем вы говорите? Какие ошибки? Тут простейший код, который вполне себе может показать на выходе ничего, если рандом не случится.

kilogram, если хотите, чтобы Вам помогли, опишите проблему подробнее. Что именно не работает?

Автор: Sentox 15.5.2012, 09:31
Цитата(Guedda @ 15.5.2012,  07:28)
Sentox, о чем вы говорите? Какие ошибки? Тут простейший код, который вполне себе может показать на выходе ничего, если рандом не случится.

Позволю не согласиться.
Начинать учиться пошаговой отладке стоит да же с примитивных примеров. Иначе получаются потом любители "вечных" var_dump();, не признающих ни какие средства отладки.
В данном примере, так же быстрее находится ошибка в отладке, при условии что топикстартер знает как это делается, без лишних созданий тем и с большим опытом.

Автор: Guedda 15.5.2012, 13:10
Цитата(Sentox @  15.5.2012,  10:31 Найти цитируемый пост)
Начинать учиться пошаговой отладке стоит 

По-моему мнению, начинать надо учиться не пошаговой отладке, а чтению кода. Это залог здорового кодинга и уменьшения ошибок в коде. А отладчик - это лишь дополнительный инструмент для программиста. Естественно, игнорировать отладчики не нужно, но и уповать на них всегда тоже не стоит (так как под интерпретируемые языки хорошие отладчики - большая редкость).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)