Мне нужно заменить несколько экземпляров определенной строки (вопросительный знак) на строки из массива. например, если строка, которую я хочу заменить, появляется 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
может обеспечить гораздо более широкий диапазон условий.