Intereting Posts
неявный paypal payment – PAY – у вас нет разрешения на выполнение этого платежа неявно Почему переопределение параметров метода является нарушением строгих стандартов в PHP? Реализация Bubble-сортировки в PHP? Фундаментальные базы данных PHP Как удалить каталог, который не пуст? Примеры уязвимого кода PHP? Я не могу вводить информацию из формы в базу данных Преобразовать короткое имя месяца в месяц Как использовать специальные символы в имени получателей при использовании почтовой функции PHP Не удается выполнить проверку подлинности на mongodb с помощью PHP Javascript: эквивалент PHP hash_hmac () с выходом RAW BINARY? Как отключить кавычки PHP-магии во время выполнения? лучше ли убеждать / закодировать пользовательский ввод, прежде чем хранить его в базе данных или сохранить его, как он есть в базе данных, и избежать его при извлечении? PHP – определить, сколько байтов отправлено через http URL-адрес почтовой программы PHP

Проанализируйте строку php и замените подстроки

У меня есть строка, в PHP и строка имеет вхождения шаблона %%abc%%(some substring)%%xyz%%

Внутри основной строки имеется множество вхождений таких подстрок. Каждое из этих вхождений должно быть заменено на строку из массива array('substring1','substring2','substring3','substring4') зависимости от ответа function() которая возвращает обратно целое число от 1 до 4.

Я не могу найти эффективный способ сделать это.

Solutions Collecting From Web of "Проанализируйте строку php и замените подстроки"

Это ситуация, которая требует preg_replace_callback :

 // Assume this already exists function mapSubstringToInteger($str) { return (strlen($str) % 4) + 1; } // So you can now write this: $pattern = '/%%abc%%(.*?)%%xyz%%/'; $replacements = array('r1', 'r2', 'r3', 'r4'); $callback = function($matches) use ($replacements) { return $replacements[mapSubstringToInteger($matches[1])]; }; preg_replace_callback($pattern, $callback, $input); 

Используйте preg_replace_callback() , например:

 preg_replace_callback( '#%%abc%%(.*?)%%xyz%%#', function( $match) { // Do some logic (with $match) to determine what to replace it with return 'replacement'; }, $master_string);