Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > str_replace по элементам массива


Автор: gta4kv 17.3.2008, 20:27
Всем привет!
По соседству есть похожая тема, не стал спрашивать там, т.к нарушение правил. smile)

Есть функция для работа с lang'om в шаблоне.
Все происходит вот так:
Код

private function langParse( )
    {
        require( $this -> lang_file );
        
        $this -> tm_content = str_replace( "template{charset}", lang_charset, $this -> tm_content );
        
        $lang_size = count( $lang ) - 1;
        $lang_keys = array_keys( $lang );
        
        for( $i = 0; $i < $lang_size; $i++ )
        {
            $this -> tm_content = str_replace( 'lang{' . $lang_keys[ $i ] . '}', $lang[ $lang_keys[ $i ] ], $this -> tm_content );
        }
        
    }

Такой вариант выглядит почему то для меня не очень оптимально.
Как можно усовершенствовать?

Пару слов, о том для чего это надо:
Есть шаблон, по нему разбросано lang{index1}, lang{index2}, ну и etc.

Сколько таких lang{(.*?)} - неизвестно..
Массив с языком тоже неизвестно какого размера, как можно заменить это функцию?
Может сначала найти, а потом уже заменять то что есть в шаблоне?
Или как будет оптимальнее?

Заранее благодарен, фигли. ;)

Автор: awers 17.3.2008, 21:10
Помоему более или менее нормально. Какой смысл рацианализировать то в чем нет затыка на текущем этапе?

Автор: gta4kv 17.3.2008, 21:14
Проблем нету, но такой вариант почему то выглядит не очень оптимально.

Автор: Canarat 17.3.2008, 21:22
http://www.php.net/preg_replace_callback

Автор: Feldmarschall 17.3.2008, 21:24
До накопления достаточного опыта не стоит доверять ощущениям. Чаще всего они обманывают.
И переживать надо не за то, что "выглядит" неоптимально, а за то, что работает неоптимально.

Автор: gta4kv 17.3.2008, 21:38
Цитата(Feldmarschall @ 17.3.2008,  21:24)
До накопления достаточного опыта не стоит доверять ощущениям. Чаще всего они обманывают.
И переживать надо не за то, что "выглядит" неоптимально, а за то, что работает неоптимально.

под выглядит я имею введу работает smile
Если сайт например 1к+ человек в сети, а массив тыща элементов - то работать будет не жутко быстро... или мне кажется? ;)

Canarat,
попробую твой пример.. ;)

Автор: Feldmarschall 17.3.2008, 21:48
Кажется.
Не очень понятно, что ты имеешь в виду под словами " 1к+ человек в сети", но если речь идет о большой посещаемости, то у тебя будут совсем другие проблемы, с другими функциями, а не со str_replace.

Автор: gta4kv 17.3.2008, 21:55
Feldmarschall, да я именно о большой посещаемости.

Раз начал, договаривай, где будет проблемы, и какие есть решения? smile))))

Автор: Feldmarschall 17.3.2008, 22:11
С базой данных врядли что-то по нагрузке сравнится. Во всяком случае, все эти копеечные парсинги вообще на её фоне не будут заметны.
Ну, и заведомо тяжелые операции, типа ресайза картинок и каких-нибудь сетевых запросов.

А вообще, предсказать, где неопытный программист умудрится накосячить - невозможно.
причем чем больше он будет озабочен производительностью - тем более тормозную систему сделает.

Автор: Sannis 17.3.2008, 22:12
Не буду говорить про "другие проблемы", но скажу про языковые переменные в скине.
Никто не заставляет грузить в массив и перебирать все переменные, используемые на сайте. Можно разбить на несколько массивов, расположить по разным файлам и в зависимости от страницы подключать нужный. Так, код я невнимательно читал, заметил нечто наводящее на такую мысль.. Но, имхо, даже на самой нагруженной странице тысячу элементов будет очень трудно набрать, а на большинстве это число сократится до 50-100.
Я бы вообще так не заморачивался. А написал бы вместо lang{login_title} в шаблоне сразу {$lang['login_title']}. А если это сделано для простоты понимания дизайнерами, то нично опять же не мешает один раз после редактирования шаблонов делать такую замену и кешировать результат smile Какой же большой проект без кеширования-то.

Автор: gta4kv 17.3.2008, 22:13
ну и ладно, оставлю все как есть

Добавлено через 11 секунд
блин

Добавлено через 58 секунд
насчет {$lang['login_title']}, у меня шаблон через парсер проходит.. так что пхп не выполняется ;)

Автор: Sannis 17.3.2008, 22:44
Цитата(gta4kv @  17.3.2008,  22:13 Найти цитируемый пост)
насчет {$lang['login_title']}, у меня шаблон через парсер проходит.. так что пхп не выполняется ;)

Жаль, сразу не было понятно что шаблон пассивный smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)