Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ТОЛЬКО ОДНО случайное значение из масива:

15K
26 июля 2007 года
SUMDEX
32 / / 12.06.2007
Мне нужно выбрать ТОЛЬКО ОДНО случайное значение из масива:

Я знаю, что можно это сделать так:

 
Код:
$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$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;

Заранее спасибо
7.9K
26 июля 2007 года
vasa_c
191 / / 05.04.2007
$input[mt_rand(0, sizeOf($input) - 1)] ?
15
26 июля 2007 года
shaelf
2.7K / / 04.05.2005
 
Код:
$array = array('cherry', 'orange', 'apple');
shuffle($array);
$randomItem = current($array);

А мне так нравится)))
15K
27 июля 2007 года
SUMDEX
32 / / 12.06.2007
Цитата: shaelf
 
Код:
$array = array('cherry', 'orange', 'apple');
shuffle($array);
$randomItem = current($array);

А мне так нравится)))



Мне кажется, это не совсем корректно, в данном случае программа дольше будет работать

2
27 июля 2007 года
squirL
5.6K / / 13.08.2003
я все понимаю, но разве язык указывать не модно? shaelf - ты расслабился и не следишь? :)
15
27 июля 2007 года
shaelf
2.7K / / 04.05.2005
О как, ну может быть... Хотя если у тебя это не в цикле который крутится 100000 раз, то мне кажется это не то место, где можно переживать за скорость)))
ИМХО в первую очередь понятность кода (не кого обидеть не хочу), а потом скорость... Как грится "преждевременная оптимизация - корень всех зол".
2squirL Модно, просто по синтаксису видно, что это такое)) А вот за не выделение кода - незачёт))
15K
27 июля 2007 года
SUMDEX
32 / / 12.06.2007
Цитата: vasa_c
$input[mt_rand(0, sizeOf($input) - 1)] ?



тоже медленный вариант (мне так кажется, поправьте, если я ошибаюсь)

15K
27 июля 2007 года
SUMDEX
32 / / 12.06.2007
Цитата: shaelf
А вот за не выделение кода - незачёт))



Исправился :)

15
27 июля 2007 года
shaelf
2.7K / / 04.05.2005
2SUMDEX Мдя... Слово "кажется" должно присутствовать у суеверных людей, а не у программистов. Что значит кажеться? Проверь!!!!! Или людей нарягать отвечать (чтобы они своё время тратили) это нормально, а самому потрудится? Впредь не нужно слов типа "кажется". Если для тебя этот алгоритм медленый - обосную. Без основания - флуд.
7.8K
27 июля 2007 года
Tingo
201 / / 17.05.2007
Таак, что у нам изначально?
 
Код:
// 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");
echo $input[array_rand ($input)];

и зачет.

А если не хочется дополнительных конструкций использовать,
то пиши свои функции.

ИМХО - зачет.
15K
27 июля 2007 года
SUMDEX
32 / / 12.06.2007
Други,
всем спасибо

shaelf - обещаю исправиться :)
239
28 июля 2007 года
Dolonet
1.7K / / 20.05.2000
Цитата: shaelf
 
Код:
$array = array('cherry', 'orange', 'apple');
shuffle($array);
$randomItem = current($array);

А мне так нравится)))


Можно придумать что-нибудь еще более медленное ;)

Не пойму, чем не нравится выбирание методом:

 
Код:
return $array[rand(count($array)-1)];
15
28 июля 2007 года
shaelf
2.7K / / 04.05.2005
Мне лично написанием))) Для меня изначально это визуальное представление кода, а уж потом оптимизация. Если даже код менее шустрый, но хорошо и понятно оформлен, при этом он проходит по ТЗ, то ИМХО его таким и нужно оставить, чтобы потом, при добавлении/исправлении было проще ошибки искать... Для любителей в экономить приведу реальный кусок кода
 
Код:
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;

И вот такими вот участками код усеян...
Повторюсь ещё раз "преждевременная оптимизация - корень всех зол".
Если можно код сделать более читаемым, то сделайте его таким, невзирая на производительность и уж тем более "мне кажеться". Если код рабочий, но нехватает скорости, включаем профайлер и вперёд, ищем узкие места, переписываем код (ессно изначально создаём пакет тестов). Лично для себя других путей я не вижу (наверное просто не хочу видеть)))).
PS Может у меня мало опыта, но мне читать строчки подобные этой
 
Код:
return $array[rand(count($array)-1)];

Довольно пока сложно, поэтому я всё раскладываю на значения и стараюсь любое возвращаемое значение делать примерно так
 
Код:
function foo()
{
    $rv = 10;
    return $rv;
}

Т.е. заносить его сначало в переменную, а потом только возвращать. Я осознаю, что каждая переменная увеличивает размер памяти, но повторюсь, пока по тестам я не пойму, что программе нужно работать быстрее, оптимизировать я её не буду))))
239
28 июля 2007 года
Dolonet
1.7K / / 20.05.2000
Я разделяю твою инициативу делать код для начала понятным человеку, а потом уже оптимизировать. Тут просто речь шла всего об одной строчке, которую сложно не понять.
15
28 июля 2007 года
shaelf
2.7K / / 04.05.2005
Эхх, разошёлся я что-то, всё напряжная неделя виновата)
2Dolonet Спасибо за как всегда конструктивные и проффесиональные ответы)))
2Автору. Я надеюсь, что из этого спора ты вынес что-то полезное.
PS Спонсор спора книга "Совершенный код" )))
239
30 июля 2007 года
Dolonet
1.7K / / 20.05.2000
2shaelf. Ты более прав в данной ситуации, чем я. Тем более, что у меня был на той неделе отпуск, а значит я отдохнувший и полон сил, чего не скажешь о тебе. :)

Я сам пишу код всегда сначала ТОЛЬКО комментариями, причем с иерархией и подробно. Потом уже пишу функции, вернее, их структуру. А наполнить функцию - это уже плевое дело. Вот таким должно быть программирование, а не все-в-одну-строчку. )
15
30 июля 2007 года
shaelf
2.7K / / 04.05.2005
Я почти так же))) Только ещё использую псевдокод... Ещё более точно:
UML
скелет
псевдокод
код
очищение от лишних комментов
рефакторинг (если нужно)
проверка на скорость
оптимизация (если нужно)
Если что-то сложное, то использую опережающие тесты.)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог