Ho bisogno di sostituire più istanze di una determinata string (punto interrogativo) con le stringhe di un arrays. ad esempio se la string che desidero sostituire appare 3 volte e il mio arrays ha una lunghezza di 3, il primo sarà sostituito dal primo elemento dell'arrays, il secondo dal secondo ecc ecc.
Si può ricolbind è abbastanza simile al modo in cui le istruzioni preparate funzionano in mysqli.
Ecco un esempio:
$ myArray = arrays ( [0] => 'giallo', [1] => 'verde', [2] => 'rosso' ); $ myString = 'banana è?, mela è?, pomodoro è?'; $ newString = someFunction ($ myString, $ myArray); echo $ newString;
Questo poi ritornerebbe
la banana è gialla, la mela è verde, il pomodoro è rosso
Qualcuno può suggerire un modo per farlo usando PHP 5.2.
perché non usare
$retString = vsprintf('banana is %s, apple is %s, tomato is %s', $myArray); return $retString;
Diventa un po 'brutto in PHP 5.2 perché devi usare le variables globali per passare le informazioni tra i callback ma altrimenti è molto flessibile. Usa preg_replace_callback()
:
preg_replace_callback('!\?!', 'rep_arrays', $myString); $i = 0; function rep_arrays($matches) { global $myArray; return $myArray[$i++]; }
Dovresti provvedere che ci sia di più ?
s delle voci dell'arrays e resetta il contatore ad each chiamata.
Adam ha ragione riguardo a sprintf()
essere un po 'più pulito, ma non si controlla sempre la string di input. preg_replace_callback
può soddisfare una vasta gamma di circostanze.