Оптимизация конструкции
Добрый день!
Имеется следующая конструкция: foreach($arr as $key=>$val) { $s=str_replace('lang['.$key.']', $val, $s); } Можно ли как-то оптимизировать? Возможно ли сделать подобное регуляркой? |
либо массив $arr должен иметь ключи, уже с 'lang[$key]', и тогда можно будет решить проблемы вообще без использования цикла (в коде).
либо так это сделать (если у вас PHP < 5.3, то функцию нужно будет определить): $s = strtr($s, array_map(function($key){ return 'lang['.$key.']';}) ); но будет ли это быстрее - вопрос :) не знаю, как у php со скоростью встроенных функций. |
Цитата:
php.net: $search = array('A', 'B', 'C', 'D', 'E'); $replace = array('B', 'C', 'D', 'E', 'F'); $subject = 'A'; echo str_replace($search, $replace, $subject); |
Цитата:
для этого же и нужна функция strtr |
melky,
strtr нужна для работы со строками, а не с массивами. Правду покажут только тесты. |
может и с массивами. в этом случае мы надеемся на скорость встроенной функции.
пример 2 : <?php $trans = array("hello" => "hi", "hi" => "hello"); echo strtr("hi all, I said hello", $trans); ?> |
$b = array('en'=>'английский','ru'=>'русский'); $a = array_keys($b); echo str_replace($a,$b,'Этот ваш en язык, нужен для того, чтобы говорить по ru'); |
эх. похоже, это дело вкуса. не буду с пеной у рта доказывать, что использование встроенных функция вместо их обхода и написания доп. кода лучше.
зато у greatilya есть выбор! |
melky,
Разве я предложил обход встроенных функций? Где? Да и потом, я предложил вариант, только после написанного тобой ранее, с array_map и function. С предложенным тобой последним вариантом я согласен. |
Вечером ради интереса оценю скорость выполнения предложенных вариантов "в бою" в строке около мегабайта нужно сделать тысячи таких подстановок. И напишу о результатах. Спасибо за подсказки, я что-то и не вспомнил про strstr, хотя не раз использовал её для транслита :)
|
Часовой пояс GMT +3, время: 12:21. |