ТОЛЬКО ОДНО случайное значение из масива:
Я знаю, что можно это сделать так:
Код:
$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand ($input);
echo $input[$rand_keys];
$rand_keys = array_rand ($input);
echo $input[$rand_keys];
Но меня это строение бесит, потому что мне не нужен ключ...
Есть ли оператор вроде этого:
$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$out = rand($input); //вместо rand - должно быть что то другое, где $out уже string значение, а не int
echo $out;
Заранее спасибо
$input[mt_rand(0, sizeOf($input) - 1)] ?
Код:
$array = array('cherry', 'orange', 'apple');
shuffle($array);
$randomItem = current($array);
shuffle($array);
$randomItem = current($array);
А мне так нравится)))
Цитата: shaelf
Код:
$array = array('cherry', 'orange', 'apple');
shuffle($array);
$randomItem = current($array);
shuffle($array);
$randomItem = current($array);
А мне так нравится)))
Мне кажется, это не совсем корректно, в данном случае программа дольше будет работать
я все понимаю, но разве язык указывать не модно? shaelf - ты расслабился и не следишь? :)
ИМХО в первую очередь понятность кода (не кого обидеть не хочу), а потом скорость... Как грится "преждевременная оптимизация - корень всех зол".
2squirL Модно, просто по синтаксису видно, что это такое)) А вот за не выделение кода - незачёт))
Цитата: vasa_c
$input[mt_rand(0, sizeOf($input) - 1)] ?
тоже медленный вариант (мне так кажется, поправьте, если я ошибаюсь)
Цитата: shaelf
А вот за не выделение кода - незачёт))
Исправился :)
2SUMDEX Мдя... Слово "кажется" должно присутствовать у суеверных людей, а не у программистов. Что значит кажеться? Проверь!!!!! Или людей нарягать отвечать (чтобы они своё время тратили) это нормально, а самому потрудится? Впредь не нужно слов типа "кажется". Если для тебя этот алгоритм медленый - обосную. Без основания - флуд.
Код:
// Originally posted by SUMDEX
$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand ($input);
echo $input[$rand_keys];
$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand ($input);
echo $input[$rand_keys];
А хочется чтоб не было временных переменных.
Так в чем проблема?
Пишем:
Код:
$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
echo $input[array_rand ($input)];
echo $input[array_rand ($input)];
и зачет.
А если не хочется дополнительных конструкций использовать,
то пиши свои функции.
ИМХО - зачет.
всем спасибо
shaelf - обещаю исправиться :)
Цитата: shaelf
Код:
$array = array('cherry', 'orange', 'apple');
shuffle($array);
$randomItem = current($array);
shuffle($array);
$randomItem = current($array);
А мне так нравится)))
Можно придумать что-нибудь еще более медленное ;)
Не пойму, чем не нравится выбирание методом:
Код:
return $array[rand(count($array)-1)];
Код:
for($i = 0; $i < $p; $i++) $this->autoSchoolList['pages'][] = array("id" => ++$l);
--------------------------------------------
$mysql = mysql_query("select `rowID` from `schools_search` where `schoolID` = '".$schoolID."'");
if( mysql_num_rows($mysql) == 0 ):
mysql_query("insert into `schools_search` set `schoolID` = '".$data['schoolID']."', `schoolMode` = '".$data['schoolMode']."', `schoolName` = '".$data['schoolName']."', `schoolAnonce` = '".$data['schoolAnonce']."', `schoolLogo` = '".$data['schoolLogo']."', `metro` = '".$data['metro']."', `keywords` = '".$data['keywords']."', `catA` = '".$t['catA']."', `catB` = '".$t['catB']."', `catC` = '".$t['catC']."', `catD` = '".$t['catD']."', `catE` = '".$t['catE']."'");
mysql_query("update `schools_main` set `schoolPublic` = '1' where `schoolID` = '".$schoolID."'");
else:
mysql_query("update `schools_search` set `schoolID` = '".$data['schoolID']."', `schoolMode` = '".$data['schoolMode']."', `schoolName` = '".$data['schoolName']."', `schoolAnonce` = '".$data['schoolAnonce']."', `schoolLogo` = '".$data['schoolLogo']."', `metro` = '".$data['metro']."', `keywords` = '".$data['keywords']."', `catA` = '".$t['catA']."', `catB` = '".$t['catB']."', `catC` = '".$t['catC']."', `catD` = '".$t['catD']."', `catE` = '".$t['catE']."' where `schoolID` = '".$schoolID."'");
mysql_query("update `schools_main` set `schoolPublic` = '1' where `schoolID` = '".$schoolID."'");
endif;
--------------------------------------------
$mysql = mysql_query("select `rowID` from `schools_search` where `schoolID` = '".$schoolID."'");
if( mysql_num_rows($mysql) == 0 ):
mysql_query("insert into `schools_search` set `schoolID` = '".$data['schoolID']."', `schoolMode` = '".$data['schoolMode']."', `schoolName` = '".$data['schoolName']."', `schoolAnonce` = '".$data['schoolAnonce']."', `schoolLogo` = '".$data['schoolLogo']."', `metro` = '".$data['metro']."', `keywords` = '".$data['keywords']."', `catA` = '".$t['catA']."', `catB` = '".$t['catB']."', `catC` = '".$t['catC']."', `catD` = '".$t['catD']."', `catE` = '".$t['catE']."'");
mysql_query("update `schools_main` set `schoolPublic` = '1' where `schoolID` = '".$schoolID."'");
else:
mysql_query("update `schools_search` set `schoolID` = '".$data['schoolID']."', `schoolMode` = '".$data['schoolMode']."', `schoolName` = '".$data['schoolName']."', `schoolAnonce` = '".$data['schoolAnonce']."', `schoolLogo` = '".$data['schoolLogo']."', `metro` = '".$data['metro']."', `keywords` = '".$data['keywords']."', `catA` = '".$t['catA']."', `catB` = '".$t['catB']."', `catC` = '".$t['catC']."', `catD` = '".$t['catD']."', `catE` = '".$t['catE']."' where `schoolID` = '".$schoolID."'");
mysql_query("update `schools_main` set `schoolPublic` = '1' where `schoolID` = '".$schoolID."'");
endif;
И вот такими вот участками код усеян...
Повторюсь ещё раз "преждевременная оптимизация - корень всех зол".
Если можно код сделать более читаемым, то сделайте его таким, невзирая на производительность и уж тем более "мне кажеться". Если код рабочий, но нехватает скорости, включаем профайлер и вперёд, ищем узкие места, переписываем код (ессно изначально создаём пакет тестов). Лично для себя других путей я не вижу (наверное просто не хочу видеть)))).
PS Может у меня мало опыта, но мне читать строчки подобные этой
Код:
return $array[rand(count($array)-1)];
Довольно пока сложно, поэтому я всё раскладываю на значения и стараюсь любое возвращаемое значение делать примерно так
Код:
function foo()
{
$rv = 10;
return $rv;
}
{
$rv = 10;
return $rv;
}
Т.е. заносить его сначало в переменную, а потом только возвращать. Я осознаю, что каждая переменная увеличивает размер памяти, но повторюсь, пока по тестам я не пойму, что программе нужно работать быстрее, оптимизировать я её не буду))))
Я разделяю твою инициативу делать код для начала понятным человеку, а потом уже оптимизировать. Тут просто речь шла всего об одной строчке, которую сложно не понять.
2Dolonet Спасибо за как всегда конструктивные и проффесиональные ответы)))
2Автору. Я надеюсь, что из этого спора ты вынес что-то полезное.
PS Спонсор спора книга "Совершенный код" )))
Я сам пишу код всегда сначала ТОЛЬКО комментариями, причем с иерархией и подробно. Потом уже пишу функции, вернее, их структуру. А наполнить функцию - это уже плевое дело. Вот таким должно быть программирование, а не все-в-одну-строчку. )
UML
скелет
псевдокод
код
очищение от лишних комментов
рефакторинг (если нужно)
проверка на скорость
оптимизация (если нужно)
Если что-то сложное, то использую опережающие тесты.)