sostituire un valore con un altro corrispondente

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Credo che mi sto perdendo in una cavolata!! Devo sostituire le stringhe "[foto01]" con "01", "[foto02]" con "02", "[foto03]" con "03", in modo tale che riesca poi a crearmi in modo dinamico l'url dell'immagine che devo andare a sostituire nelle parti del testo che contenga [foto01], [foto02], oppure [foto03].
Ho provato diverse strade, l'ultima provata è:

PHP:
    $foto = array("[foto01]","[foto02]","[foto03]");
    $num = array("01","02","03");
    $n = str_ireplace($foto,$num,$n);
    
        $pic = "$manifestazione".'_'."$n";
        $testo = str_ireplace($foto,$pic,$testo);
          echo $testo;

ma non il risultato sperato. Mi stampa solo $manifestazione_ e non il numero corrispondente
cosa non va?
 
mi sa che il problema è come imposto il procedimento. Praticamente ho un testo che estraggo da un campo di un dbase e devo formattarlo. Ho inserito nel testo [foto01] [foto02] [foto03] laddove va inserita la foto. Quindi il mio obiettivo è sostituire [foto01] con <img src='nomevento01.jpg'>. Per fare questo uso una funzione che è:

PHP:
<?php
function formattazione ($manifestazione,$testo)
{
 /*formatto il testo in grassetto, corsivo ecc*/
............
  /*si procede alla sostituzione delle foto*/
    $foto = array("[foto01]","[foto02]","[foto03]");
    $num = array("01","02","03");
    $n = str_ireplace($foto,$num,$n);
        $pic = "$manifestazione".'_'."$n";
        $testo = str_ireplace($foto,$pic,$testo);

  return $testo;
}
?>

e successivamente ho la chiamata alla funzione
$programma = formattazione ($manifestazione,$programma);

dove $testo è il testo da formattare.

Ho notato che se sostituisco $testo con $n nel testo ho la sostituzione desiderata (i valori 01,02 ecc) ma io devo ottenere come risultato finale il percorso dell'immagine ed è questo che mi blocca :book:
 
ciao
ci sono un paio di cose che non mi tornano
1.
intanto per sotituire [foto01] ecc.. con 01 ecc...
farei
$n = str_replace($foto,$num,$num);
2.
nella riga di $pic scrivendo
$pic= "$manifestazione";
non scrivi manifestazione, ma il valore della variabile $manifestazione che non è inizializzata, quindi vuota
3.
sempre alla riga di $pic fai un concatenamento (a parte quello detto al 2.) tra una stringa e un array ($n è un array)
4.
io userei str_replace o meglio preg_replace

tutto questo se non ho preso un granchio:dormo:
 
$manifestazione è inizializzata (lo estraggo con una SELECT da un dbase) e infatti io non ottengo la stampa di $manifestazione ma il contenuto della variabile.
Ho un pò modificato lo script precedente anche se il procedimento è lo stesso. Da quanto ho capito l'errore sta nel fatto che concateno un'array con delle variabili.
PHP:
..........
    $foto = array("[foto01]","[foto02]","[foto03]");
    $num = array("01","02","03");
    $n = str_replace($foto,$num,$num);

    $url01 = "<img src='pic/";
    $url02 = "_";
    $url03 = ".jpg' alt='' width='540px' height='200px'>";

    $url = $url01.$manifestazione.$url02.$n.$url03;

        $testo = str_ireplace($foto,$url,$testo);
............

Forse devo provare ad usare foreach ma ancora non sono tanto pratica :book:
 
ciao
da quanto ho capito tu vuoi ottenere il link delle foto (da 01 in poi) cioè qualcosa di simile
HTML:
<!--....-->
<img src="pic/Palio_01.jpg" alt="" width="540px" height="200px">
<img src="pic/Palio_02.jpg" alt="" width="540px" height="200px">
<img src="pic/Palio_03.jpg" alt="" width="540px" height="200px">
<!--ecc....-->
o sbaglio? se è così potresti fare qualcosa del genere

PHP:
<?php
//................
foreach($n as $valore){
echo "<img src=\"pic/".$manifestazione."_".$valore.".jpg\" alt=\"\" width=\"540px\" height=\"200px\"><br>";
}
//..............
?>
oppure scrivendo l'echo più semplicemente
PHP:
<?php
//................
foreach($n as $valore){
echo "<img src=\"pic/$manifestazione_$valore.jpg\" alt=\"\" width=\"540px\" height=\"200px\"><br>";
}
//..............
?>

se ho capito male scusa
 
Non esattamente. Praticamente ho un testo $testo dove ho inserito in più parti [foto01], [foto02] e cosi via. Devo sostituire [foto01] l'url della foto che io ho nominato con $manifestazione_01.jpg, il punto indicato con [foto02] va sostituito con l'url della foto che io ho nominato $manifestazione_02. jpg e cosi via.
 
Ultima modifica:
ciao
ma ad una certa età si è un po' duri di comprendonio.
quindi hai un testo del tipo:

PHP:
$testo="nel mezzo di camin [foto01] di nostra vita mi ritrovai in una selva [foto02] oscura che la diritta via [foto03] era smarrita...";
poi hai le foto (es. inferno_01.jpg, inferno_02.jpg ecc...) e vorresti che il testo diventasse:
PHP:
<?php
$testo="nel mezzo di camin <img src=\"pic/inferno_01.jpg\" .....> di nostra vita... eccetera...";
?>
se è così, con un po' di pazienza ci do un'occhiata poi ti posto alcune dritte.
 
esattamente mi sono persa in una valle oscura! ed io che pensavo fosse una cavolata! Si è esattamente quello che devo fare. Oggi ci ho talmente ragionato che ora non riesco a trovare più la dritta via!
 
ciao
se sei sicura che nel testo la str da cambiare si scritta [foto01], [foto02] ecc...., potresti fare così
PHP:
<?php
//questa è quella che ricavi dal db
$manifestazione ="inferno";
//e questo è il testo da trattare
$testo_iniziale="nel mezzo di camin [foto01] di nostra vita... eccetera...";
//costruisci la prima parte della stringa da sostituire
$cambia_1="[foto";
//che deve essere cambiata con
$con_1="<img src=\"pic/$manifestazione_";
//costruisci la parte finale da campiare
$cambia_2="]";
//che deve essere cambiata con
$con_2=".jpg\" alt=......>";
//esegui la prima sostituzione
$testo_1=str_ireplace($cambia_1,$con_1,$testo_iniziale);
/*in $testo_1 dovresti trovare
"nel mezzo di camin <img src=\"pic/inferno_01] di nostra vita... eccetera..."
*/
//esegui la seconda sostituzione
$testo_2=str_ireplace($cambia_2,$con_2,$testo_1);
/*in $testo_2 dovresti trovare
"nel mezzo di camin <img src=\"pic/inferno_01.jpg\" .....> di nostra vita... eccetera..."
*/
echo testo_2;
?>
eventualmente provalo e sappimi dire
 
Ma usare le PCRE no, vero?
PHP:
<?php
$string = 'Questa stringa [foto1] contiene [foto2] delle foto [foto3].';
$string = preg_replace('@\[foto(\d+)\]@', '<img src="$1.jpg" />', $string);

// Questa stringa <img src="1.jpg" /> contiene <img src="2.jpg" /> delle foto <img src="3.jpg" />.
echo $string;
?>
Ovviamente dovrai adattare il percorso delle foto.
 

Discussioni simili