Intereting Posts

Множественная замена (возможно, preg_replace) той же строки с массивом

Мне нужно заменить несколько экземпляров определенной строки (вопросительный знак) на строки из массива. например, если строка, которую я хочу заменить, появляется 3 раза, а мой массив имеет длину 3, первый из них будет заменен первым элементом в массиве, вторым – вторым и т. д. и т. д.

Вы можете повторить, что это очень похоже на то, как подготовленные операторы работают в mysqli.

Вот пример:

 $ myArray = массив (
     [0] => «желтый»,
     [1] => «зеленый»,
     [2] => 'red'
 );

 $ myString = 'банан есть?, яблоко?, томатный??;

 $ newString = someFunction ($ myString, $ myArray);

 echo $ newString;

Тогда это вернет

 банан желтый, яблоко зеленое, помидор красный

Может кто-нибудь предложить способ сделать это, используя PHP 5.2.

почему бы не использовать

$retString = vsprintf('banana is %s, apple is %s, tomato is %s', $myArray); return $retString; 

Это немного уродливо в PHP 5.2, потому что вы должны использовать глобальные переменные для передачи информации между обратными вызовами, но в противном случае это очень гибко. Используйте preg_replace_callback() :

 preg_replace_callback('!\?!', 'rep_array', $myString); $i = 0; function rep_array($matches) { global $myArray; return $myArray[$i++]; } 

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

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