La funzione str_replace() si incontra spesso tanto in script “amatoriali” quanto in script di alto livello. La sua utilità sta nella possibilità di modificare parte del contenuto di una informazione (variabile, stringa non in variabile, etc.) o tutto il suo contenuto con una nuova informazione. Questa è la sua grammatica:
str_replace(([infoParteOrigine],[infoNuova],[infoOrigine]]);
- il risultato di str_replace() può essere assegnato ad una variabile - il cui nome può coincidere con il nome dell’eventuale “vecchia” variabile su cui s’intende far agire la funzione – oppure può essere mandato direttamente in output su schermo (echo).
- Le prime due informazioni richieste da str_replace() servono per definire i limiti entro cui la funzione è chiamata a lavorare il terzo parametro.
- [infoParteOrigine] può essere una stringa di qualsiasi tipo o una variabile definita da un qualsiasi tipo d’informazione non necessariamente riconducibile al concetto di stringa. per il discorso “stringa” ti rimando alla definizione di variabile e a heredoc
- [infoNuova] stesso discorso di [stringaOrigine].
- [infoOrigine] può essere una variabile, come scritto al primo punto, come anche una stringa non in variabile. In entrambi i casi, contenitori di un qualche tipo d’informazione… in caso contrario non avrebbe senso la chiamata in esecuzione della funzione.
Riporto un passaggio del post di ieri (heredoc, già linkato qualche riga sopra):
ho inserito $/php invece di $php perché altrimenti il motore PHP l’avrebbe interpretata come una chiamata di variabile, mandando in stampa la stringa =<<<EOP testo EOP;
Su questo passaggio tiro su uno script:
<?php
$esempio =<<<EOF
$/php = 123;
EOF;
echo str_replace(“$/”,”$”,$esempio);
?>
Nota bene: se vuoi fare anche tu i tuoi esperimenti con questi script d’esempio… dopo aver copiato e incollato il codice potrebbe essere necessario riscrivere gli apici e i doppi apici per una corretta esecuzione dello script. Ciò dipende dal CSS utilizzato con questo layout… che non cambio!
Mando in esecuzione lo script:

L’output è corretto. ![]()
La funzione cerca $/ all’interno dell’ heredoc $esempio e, trovandolo, esegue la richiesta di sostituirlo con $. Finito il compito, il motore PHP passa ad eseguire la chiamata del costrutto echo e manda in stampa su schermo la stringa $php = 123;. $php non è più una variabile ma semplice testo. Discorso diverso sarebbe stato se avessi scritto $php all’interno dell’ heredoc. argomento già trattato in heredoc
All’inizio di questo post ho scritto che str_replace() è in grado di lavorare su una variabile, quale che sia l’informazione che la definisce. Questo perché una variabile può anche non essere definita da una stringa. E’ il caso di variabili a cui sono assegnati insiemi d’informazioni: gli array.
Considera questo script:
<?php
// imposto un array contenente le “vecchie” informazioni e uno contenente le nuove
$array1 = Array(“3″,”4″,”5″);
$array2 = Array(“:::”,”::::”,”:::::”);// l’array “madre” che intendo modificare
$array = Array(“3″,”4″,”5″);// modifico il contenuto dell’array madre e mando in output le informazioni presenti in array
$array = str_replace($array1,$array2,$array);
for ($x=0;$x<count($array);$x++){
echo “<br />sequenza in array: “.$array[$x];
}// imposto la stringa che intendo modificare
$stringa = “sequenza 3-4-5″;// modifico la stringa e mando in output
$stringa = str_replace($array1,$array2,$stringa);
echo “<br /><br /> sequenza in stringa: $stringa”;
?>
L’utilizzo corretto di str_replace() assieme agli array richiede la conoscenza di almeno queste info:
- Il vecchio Array e il nuovo devono avere lo stesso numero di indici. Questo discorso vale anche nel caso in cui [infoOrigine] sia anch’esso un array.
- Nel caso in cui [infoParteOrigine] sia un array e [infoNuova] no… s’incasina il motore PHP e nient altro
- Nel caso in cui s’invertano le parti (punto 2), stesso discorso…



