preg_replace и счетчик

Marquis

Новичок
preg_replace и счетчик

Имеем следующую конструкцию:
PHP:
preg_replace ("#...()...()...#e", "_handler('\\2', \$args[1])", $string);
Каким обрзом можно в preg_replace сделать автоинкремент ключа переменной $args ?

ps. Буду благодарен за любые ответы.
 

hermit_refined

Отшельник
Можно - делая инкремент ключа переменной $args. Но вообще - жуть, и непонятно зачем эта жуть вам тут. Используйте preg_replace_callback().
 

Marquis

Новичок
hermit_refined
не совсем понимаю как использовать эту функцию, вот есть у меня строка "123 {A} 456 {B} 789 {C} 0" и динамически генерируемый массив args . Есть правила соответсвия тегов {_что_то_там_} определнным элементам массива args .

Осюда вопрос.

Каким образом через функцию preg_replace_callback() передать на обработку пару "тег" => "элемент_массива" по аналогии с тем, как это происходит при использовании функции preg_replace в цикле.

ps. но сдается мне, что где то я не догоняю простых вещей и в следсвии этого мои рассуждения ошибочны.
 

Андрейка

Senior pomidor developer
Marquis
ну все простые вещи описаны в мануале, не так ли? вы ознакомились с ним?
 

SiMM

Новичок
[m]preg_replace_callback[/m]
> Каким образом через функцию preg_replace_callback() передать на обработку пару "тег" => "элемент_массива" по аналогии с тем, как это происходит при использовании функции preg_replace в цикле.
Ну ты хоть отладочным выводом-то посмотри, что там тебе приходит, если мануал непонятен.
 

Marquis

Новичок
всем спасибо за ответы.
вопрос решен, изначально не верно спланированная логика завела меня в тупик.

ps. ну хоть вспомнил что такое мануал :)

-~{}~ 29.10.06 23:01:

мучает вопрос по функции preg_replace_callback
т.е. имеем
PHP:
preg_replace_callback ('regular', 'handler', $string, count);
собсна вопрос, возможно ли в функцию handler передать доп. свой аргумент? сейчас есть решение, но через Ж т.к. юзается через create_function() . производителнасть по сравнению с извращениеями через preg_replace() гораздо ниже.
 

hermit_refined

Отшельник
Разумеется, возможно - либо через глобальные переменные (не ахти способ), либо через классы. Например:
PHP:
class CrazyReplace
{
	var $data;

	function CrazyReplace($data)
	{
		$this->data = $data;
	}

	function replace($str)
	{
		return preg_replace_callback('@\w+@', array(&$this, '_callback'), $str);
	}

	function _callback($matches)
	{
		return ...;
	}
}
 
Сверху