2 заметки с тегом
optimizing РСС
17 марта 2011, 10:46
PHP: превращаем слово единственного числа в множественное
Нужно было, быстро на коленке стряпать такую вот функцию. Изначально она была сделана по примерам возможных слов, и приняла такой вид:
Взглянув на это, стало как-то печально, особенно если учитывать что примеров может быть намного больше, взял и автоматизировал/оптимизировал:
Вот так родился такой монстрик ;) А сами окончания наверное правильнее будет передавать в функцию, хотя если они останутся в ней, база нарастёт быстрее.
function make_multiple($word) { $word = trim($word); $lst1 = substr($word,-1);$rest1 = substr($word,0,-1); $lst2 = substr($word,-2);$rest2 = substr($word,0,-2); $lst3 = substr($word,-3);$rest3 = substr($word,0,-3); if ($lst3 == "нки") $word = $rest3."нков"; elseif ($lst2 == "ки" || $lst2 == "ка") $word = $rest2."ок"; elseif ($lst2 == "ры") $word = $rest2."р"; elseif ($lst2 == "ия") $word = $rest2."ий"; elseif ($lst2 == "рь") $word = $rest2."рей"; elseif ($lst1 == "ы") $word = $rest1."ов"; return $word; }
Взглянув на это, стало как-то печально, особенно если учитывать что примеров может быть намного больше, взял и автоматизировал/оптимизировал:
function make_multiple($word) { $word = trim($word); // массив возможных вариантов $ends = array( "нки" => "нков", "ки" => "ок", "ка" => "ок", "ры" => "р", "ия" => "ий", "рь" => "рей", "ы" => "ов" ); // ищем самое большое окончание, то есть его длину $itrs = max(array_map('strlen', array_keys($ends))); $poly = array(); // строим массив этих окончаний, и слов без них for ($i = $itrs; $i > 0 ; $i--) { // в таком виде что бы избежать циклов в цикле $poly[$i] = array(substr($word,-$i),substr($word,0,-$i)); } // строим нужно слово, когда найдём сопадение foreach ($ends as $what => $to) { if ($poly[strlen($what)][0] == $what) { return $poly[strlen($what)][1].$to; } } return $word; }
Вот так родился такой монстрик ;) А сами окончания наверное правильнее будет передавать в функцию, хотя если они останутся в ней, база нарастёт быстрее.
2 комментария16 апреля 2010, 14:31
Пример оптимизации — shadowbox
Есть чудный «лайтбокс» под названием shadowbox. Всё хорошо, но для работы нужно много файлов:
- джаваскритп,
- стиль,
- 5 картинок;
- Засовываем вместо ссылок на фон, base64-картинки, сделать их можно с помощью утилиты Сергея Чикуёнка. Не забываем, вставлять нужно без каких либо скобок;
- С помощью импорта стиля, просто сразу добавляем стиль перед </head>;
- засовываем всё это в начале скрипта, стиль строкой, строку импортим, а после самого скрипта шадовбокса, инициилизируем его-же;
- ...
- Профит!
