Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2011, 13:51
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Оптимизация конструкции
Добрый день!

Имеется следующая конструкция:
foreach($arr as $key=>$val) {
	$s=str_replace('lang['.$key.']', $val, $s);
}

Можно ли как-то оптимизировать? Возможно ли сделать подобное регуляркой?
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2011, 19:59
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

либо массив $arr должен иметь ключи, уже с 'lang[$key]', и тогда можно будет решить проблемы вообще без использования цикла (в коде).

либо так это сделать (если у вас PHP < 5.3, то функцию нужно будет определить):

$s = strtr($s, array_map(function($key){ return 'lang['.$key.']';})  );


но будет ли это быстрее - вопрос не знаю, как у php со скоростью встроенных функций.
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2011, 20:32
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от greatilya Посмотреть сообщение
Добрый день!

Имеется следующая конструкция:
foreach($arr as $key=>$val) {
	$s=str_replace('lang['.$key.']', $val, $s);
}

Можно ли как-то оптимизировать? Возможно ли сделать подобное регуляркой?
Если нужно по скорости то возможно экономней будет str_replace кормить массивами, а не вызывать его в цикле.
php.net:
$search  = array('A', 'B', 'C', 'D', 'E');
$replace = array('B', 'C', 'D', 'E', 'F');
$subject = 'A';
echo str_replace($search, $replace, $subject);
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2011, 20:39
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Gozar Посмотреть сообщение
Если нужно по скорости то возможно экономней будет str_replace кормить массивами, а не вызывать его в цикле.
у него один массив, где ключ - то, что надо заменить, а значение - то, на что заменить.

для этого же и нужна функция strtr
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2011, 20:41
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

melky,
strtr нужна для работы со строками, а не с массивами.
Правду покажут только тесты.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2011, 20:42
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

может и с массивами. в этом случае мы надеемся на скорость встроенной функции.
пример 2 :
<?php
$trans = array("hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2011, 20:46
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

$b = array('en'=>'английский','ru'=>'русский');
$a = array_keys($b);
echo str_replace($a,$b,'Этот ваш en язык, нужен для того, чтобы говорить по ru');
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #8 (permalink)  
Старый 18.12.2011, 20:48
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

эх. похоже, это дело вкуса. не буду с пеной у рта доказывать, что использование встроенных функция вместо их обхода и написания доп. кода лучше.

зато у greatilya есть выбор!
Ответить с цитированием
  #9 (permalink)  
Старый 18.12.2011, 20:50
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

melky,
Разве я предложил обход встроенных функций? Где? Да и потом, я предложил вариант, только после написанного тобой ранее, с array_map и function. С предложенным тобой последним вариантом я согласен.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 18.12.2011 в 21:05.
Ответить с цитированием
  #10 (permalink)  
Старый 19.12.2011, 06:25
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Вечером ради интереса оценю скорость выполнения предложенных вариантов "в бою" в строке около мегабайта нужно сделать тысячи таких подстановок. И напишу о результатах. Спасибо за подсказки, я что-то и не вспомнил про strstr, хотя не раз использовал её для транслита
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода. Правила хорошего тона при написании скриптов [ANTI]CheateR jQuery 1 18.09.2010 08:41
Оптимизация скрипта Беляш jQuery 3 11.07.2010 14:45
Оптимизация и разбор javascript! o55rus Общие вопросы Javascript 2 23.09.2008 20:33
Оптимизация и Быстрый код Виталий Общие вопросы Javascript 18 24.07.2008 00:21
Оптимизация скриптов object Ваши сайты и скрипты 9 21.07.2008 13:58