Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Быстродействие

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
WiciN
Отправлено: 04 Октября, 2009 - 21:00:49
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Нояб. 2007  
Откуда: Симферополь


Помог: 0 раз(а)




Привет всем, наверное не только мне надоели надписи типа "Всего 4 штук", "Найдено 23 строк". В голову пришло сразу несколько решений. Подскажите какой из вариантов лучше использовать, например при построении списков из 1000 и более элементов.
Вариант 1
PHP:
скопировать код в буфер обмена
  1. function slovo_game($count){
  2. switch ($count%10) {
  3. case '1': return ' игра'; break;
  4. case '2': return ' игры'; break;
  5. case '3': return ' игры'; break;
  6. case '4': return ' игры'; break;
  7. case '5': return ' игр'; break;
  8. case '6': return ' игр'; break;
  9. case '7': return ' игр'; break;
  10. case '8': return ' игр'; break;
  11. case '9': return ' игр'; break;
  12. case '0': return ' игр'; break;
  13. }
  14. }
  15. echo "Доступно <b>$count_games</b>". slovo_game($count_games);

Вариант 2
PHP:
скопировать код в буфер обмена
  1. $str_games[0]=' игр';
  2. $str_games[1]=' игра';
  3. $str_games[2]=' игры';
  4. $str_games[3]=' игры';
  5. $str_games[4]=' игры';
  6. $str_games[5]=' игр';
  7. $str_games[6]=' игр';
  8. $str_games[7]=' игр';
  9. $str_games[8]=' игр';
  10. $str_games[9]=' игр';
  11. echo "Доступно <b>$count_games</b>". $str_games[$count_games%10];

Конечно огромного прироста скорости я не жду, но этот вопрос меня так же мучает как и разница между
PHP:
скопировать код в буфер обмена
  1. echo 'Текст '.$text.' текст';
  2. // или
  3. echo "Текст $text текст";

(Отредактировано автором: 04 Октября, 2009 - 21:13:13)



-----
Настоящий программист должен иметь быстрые руки, грязную голову и холодное пиво.
 
 Top
Гриша Краснодар
Отправлено: 04 Октября, 2009 - 21:16:08
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. echo 'Текст '.$text.' текст';
  2. // или
  3. echo "Текст $text текст";

В первом варианте выведит: текст$textтекст
Во втором подставит вместо $text значение этой переменной. Например если $text="php.su", тогда выведит: текстphp.suтекст
 
 Top
Phantik
Отправлено: 04 Октября, 2009 - 21:30:44
Post Id


Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Неделю назад писал эту функцию на JavaScript. Исходники не сохранились но смысл там примерно следущий

в функцию передается 4 параметра:
1) Число
2) 'игра'
3) 'игры'
4) 'игр'

Далее функция смотрит
если поледняя цифра числа равна 1 то возвращаем 'игра'
если последняя цифра числа лежит в интервале от 2 до 4 то возвращаем 'игры'
если последняя цифра числа лежит в интервале от 5 до 9 либо 0 то возвращаем 'игр'.

НО !!!! (великий могучий русский язык) есть исключения. Это числа которые находятся во вторых десятках:

11 - 19 - игр
111-119 - игр
211-219 - игр
311-319 - игр
.....
1011-1019 - игр
....

Поэтому к общему правилу добавляем еще дополнительное условие:
выделяем последнии 2 разряда от числа и смотрим принадлежит ли это число интервалу
от 11 до 19 если да то возвращаем 'игр' а если нет то выводим по общему правилу(см. выше)

Последняя цифра выделяется операцией %10
две последние %100 соответственно.

Саму функцию сейчас нету времени писать, но в целом алгоритм такой.
 
 Top
EuGen Администратор
Отправлено: 04 Октября, 2009 - 21:32:46
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




http://forum.php.su/topic.php?fo...=35&topic=23

Это имелось ввиду?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
koras
Отправлено: 04 Октября, 2009 - 21:53:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 224
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




)))
Иногда задумывался о подобном и искал среднее значение

1 - игра
111-119 - игрушек
 
 Top
WiciN
Отправлено: 04 Октября, 2009 - 22:12:24
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Нояб. 2007  
Откуда: Симферополь


Помог: 0 раз(а)




Гриша Краснодар пишет:
PHP:
скопировать код в буфер обмена
  1. echo 'Текст '.$text.' текст';
  2. // или
  3. echo "Текст $text текст";

В первом варианте выведит: текст$textтекст
Во втором подставит вместо $text значение этой переменной. Например если $text="php.su", тогда выведит: текстphp.suтекст


Значение переменной подставится в обоих вариантах. И если $text="php.su", тогда выведит: текст php.su текст.
(Добавление)
Phantik пишет:
НО !!!! (великий могучий русский язык)
Это точно! Я, написав эту функцию, пользовал её в х… не дуя. И спустя недели 2-3 увидел "11 игра" и только тогда вспомнил чему в школе учили.
НО !!!!
Алгоритм меня не интересует, он не такой сложный, чтоб искать советов или готового решения. Я так и думал, что ответы будут о вариантах алгоритма, поэтому назвал тему "Быстродействие".

Попытка задать вопрос №2: У меня генерируется файл для скачивания на данный момент 2215 строк. В цикле вызываются функции подмены слова в зависимости от цифры, и подмены окончания в зависимости от пола Мэ или Жо. Меня интересует что отработает быстрее и с минимальными затратами ресурсов: оператор выбора switch (вариант 1) или указание ключа массиву (вариант 2).
Так же интересует что быстрее 'Текст '. $text .' текст' или "Текст $text текст";. Пускай разница не значительная, но как говориццо: байтик метр бережёт.

Буду благодарен тому, кто кинет в меня ссылкой где можно почитать про быстродействие операторов и функций в php. Яндекс и Google не предлагать, всё что находил описано слишком абстрактно, море слов а сути нет. Читал про одинарные и двойные кавычки в одной статье написано так, в другой наоборот. И самое интересное, что оба автора приводят неопровержимые доказательства Радость

(Отредактировано автором: 04 Октября, 2009 - 23:10:28)



-----
Настоящий программист должен иметь быстрые руки, грязную голову и холодное пиво.
 
 Top
Stierus Супермодератор
Отправлено: 05 Октября, 2009 - 09:41:07
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




с массивом быстрее будет
'Текст '. $text .' текст' быстрее

ps
"2215 строк" ... запусти оба варианта и засеки время выполнения - сам все увидишь. На поиски в гугле времени больше уйдет Улыбка

(Отредактировано автором: 05 Октября, 2009 - 09:49:07)

 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB