PHP.SU

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

Страниц (594): В начало « ... 2 3 4 5 [6] 7 8 9 10 ... » В конец

> Найдено сообщений: 8901
EuGen Отправлено: 18 Марта, 2014 - 09:41:54 • Тема: Какой запрос mysql более валидный • Форум: Вопросы новичков

Ответов: 2
Просмотров: 145
Указать всё в IN
PHP:
скопировать код в буфер обмена
  1. $mysql->query ("SELECT * FROM `permanent_url` WHERE `md5_id` IN (".
  2. join(',', array_map(function($x)
  3. {
  4.    //optional: apply escaping here if not in driver
  5.    return "'".$x."'";
  6. }, $arr_values)).
  7. ")");

- тогда MySQL сумеет воспользоваться range scan (если создан индекс по md5_id. Если индекса нет, а запрос частый - создать). Не использовать запрос в цикле.
EuGen Отправлено: 17 Марта, 2014 - 08:50:40 • Тема: помогите пожалуйста • Форум: Вопросы новичков

Ответов: 3
Просмотров: 370
PHP:
скопировать код в буфер обмена
  1. $words = preg_split('/\W+/', file_get_contents('/path/to/file'), -1, 1);
  2. usort($words, function($x, $y)
  3. {
  4.    return strlen($y)-strlen($x);
  5. });
  6.  
  7. echo $words[0];


?
EuGen Отправлено: 14 Марта, 2014 - 11:55:11 • Тема: сыграем в игру • Форум: Прочее

Ответов: 11
Просмотров: 121
Порт для IOS отменяется

Ну и появился бот для игры (в ответ на вопрос на SO).

Однако, у меня он проиграл при первом запуске.


И, наконец, мой результат:

Спойлер (Отобразить)
EuGen Отправлено: 13 Марта, 2014 - 16:29:55 • Тема: сыграем в игру • Форум: Прочее

Ответов: 11
Просмотров: 121
Опубликовал в чат internals. Теперь все играют в игру и не могут остановиться. Энтони Феррара(core PHP dev) собирается сделать порт для Android, я думаю сделать оное для IOS.

появились первые "читы" наподобие
CODE (javascript):
скопировать код в буфер обмена
  1. this.over = false; var a = {x: 3, y: 3}; this.grid.removeTile(a);


P.S. <sarcasm>релиз 5.6 затянется. </sarcasm>
EuGen Отправлено: 13 Марта, 2014 - 16:02:48 • Тема: array_shift • Форум: Вопросы новичков

Ответов: 11
Просмотров: 584
Смысл в том, что для извлечения первого элемента массива, в случае, если индексы не важны, достаточно связки current+key+unset, что будет намного быстрее. Разумеется, это зависит от контекста (имею ввиду, выборку первого элемента). Однако array_shift, в свою очередь, так же не полностью безопасен при работе с указателями массивов, так как при выходе за границу он сбросит указатель на первый доступный:

PHP:
скопировать код в буфер обмена
  1. $data = ['foo', 'bar', 'baz'];
  2. next($data);
  3.    current($data), //bar
  4.    array_shift($data), //foo
  5.    array_shift($data), //bar
  6.    $data, //['baz']
  7.    current($data) //baz
  8. );

С другой стороны, это вполне ожидаемое поведение.

Строго говоря, конструкции не эквивалентны, но в большинстве случаев, для извлечения первого элемента (особенно актуально в циклах) - намного корректнее использовать функции указателей.
EuGen Отправлено: 13 Марта, 2014 - 14:55:20 • Тема: array_shift • Форум: Вопросы новичков

Ответов: 11
Просмотров: 584
Не рекомендую пользоваться функцией array_shift без явной нужды. Она имеет сложность O(n) и извлечение элемента приводит к внутренней переиндексации.

Например (использована библиотека benchmark), сравнительные тесты:

PHP:
скопировать код в буфер обмена
  1. class Foo
  2. {
  3.     public static function shl(&$array)
  4.     {
  5.         //for "honest" comparison, extract result into separate $x
  6.         $x = array_shift($array);
  7.         return $x;
  8.     }
  9.    
  10.     public static function del(&$array)
  11.     {
  12.         $x = current($array);
  13.         unset($array[key($array)]);
  14.         return $x;
  15.     }
  16. }

- для тестирования метода, при этом второй вариант - с использованием функций массива. Код профилировки:

PHP:
скопировать код в буфер обмена
  1.  
  2. $measure    = new \Benchmark\Measure;
  3.  
  4. $data       = array_fill(0, 1E5, mt_rand());
  5. $x          = $measure->benchmarkTime(['Foo', 'shl'], [&$data], (int)1E5);
  6.  
  7. $data       = array_fill(0, 1E5, mt_rand());
  8. $y          = $measure->benchmarkTime(['Foo', 'del'], [&$data], (int)1E5);
  9. var_dump($x, $y);


Полученный результат (итоговое время/среднее время/число итераций):
PHP:
скопировать код в буфер обмена
  1. array(3) {
  2.   [1]=>
  3.   float(312.36020207405)
  4.   [2]=>
  5.   float(0.0031236020207405)
  6.   [3]=>
  7.   int(100000)
  8. }
  9. array(3) {
  10.   [1]=>
  11.   float(0.47592687606812)
  12.   [2]=>
  13.   float(4.7592687606812E-6)
  14.   [3]=>
  15.   int(100000)
  16. }


Это означает, что результат array_shift оказался на 3 порядка хуже, чем вариант с явным удалением ключа. И это - несмотря на то, что функция прекомпилирована. Естественно, чем дальше, тем хуже, так как сложность второго варианта есть O(1)
EuGen Отправлено: 11 Марта, 2014 - 11:11:31 • Тема: PHP 5.6 • Форум: Новости веб-технологий

Ответов: 2
Просмотров: 49
Доступна первая публичная альфа-версия PHP 5.6 (вернее, дня три как доступна). Попробовать можно здесь / (win)
EuGen Отправлено: 10 Марта, 2014 - 13:09:37 • Тема: Как получить переменную из родительского класса в дочернем? • Форум: Вопросы новичков

Ответов: 10
Просмотров: 396
Сайга-12 пишет:
Можно ли создать дочерний объект от родительского объекта? Т.е. не от самого родительского класса, а именно от его объекта?

Объект - это экземпляр класса. Отношения же наследования задаются на уровне структуры, то есть класса. "Наследник объекта" не имеет никакого смысла.
EuGen Отправлено: 10 Марта, 2014 - 13:07:55 • Тема: Звуковой сигнал • Форум: JavaScript & VBScript

Ответов: 1
Просмотров: 792
Да, возможно.
EuGen Отправлено: 10 Марта, 2014 - 13:06:48 • Тема: скрипт выдачи ключей лицензий • Форум: Напишите за меня, пожалуйста

Ответов: 1
Просмотров: 52
Во Freelance
EuGen Отправлено: 05 Марта, 2014 - 16:37:12 • Тема: Установить время жизни cookie • Форум: JavaScript & VBScript

Ответов: 24
Просмотров: 5173
stackoverflow пишет:

CODE (javascript):
скопировать код в буфер обмена
  1. function writeCookie (key, value, days) {
  2.     var date = new Date();
  3.  
  4.     // Default at 365 days.
  5.     days = days || 365;
  6.  
  7.     // Get unix milliseconds at current time plus number of days
  8.     date.setTime(+ date + (days * 86400000)); //24 * 60 * 60 * 1000
  9.  
  10.     window.document.cookie = key + "=" + value + "; expires=" + date.toGMTString() + "; path=/";
  11.  
  12.     return value;
  13. };
EuGen Отправлено: 05 Марта, 2014 - 16:25:36 • Тема: Опасные HTML символы • Форум: Программирование на PHP

Ответов: 9
Просмотров: 2658
С Новым Годом.
EuGen Отправлено: 05 Марта, 2014 - 15:23:04 • Тема: Странный результат запроса • Форум: SQL и Архитектура БД

Ответов: 2
Просмотров: 18
Обратите внимание на поле группировки. Подозреваю, что у Вас одно и то же значение в нём для всех строк выборки, однако строк с таким значением - три.
EuGen Отправлено: 27 Февраля, 2014 - 20:04:48 • Тема: выбрать повторяющиеся записи • Форум: Вопросы новичков

Ответов: 2
Просмотров: 142
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.   COUNT(product_code) AS product_count,
  3.   *
  4. FROM
  5.   SS_products
  6. GROUP BY
  7.   product_code
  8. HAVING
  9.   product_count>1

?
EuGen Отправлено: 27 Февраля, 2014 - 12:03:51 • Тема: простое регулярное выражение • Форум: Вопросы новичков

Ответов: 3
Просмотров: 187
Нужно не считать это ошибкой, а правильно интерпретировать. Для пользователя неочевидно, что нужен пробел и он будет забывать, когда его ставить, до или после запятой. А так же нужна ли запятая или точка с запятой и т.п.

Страниц (594): В начало « ... 2 3 4 5 [6] 7 8 9 10 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB