Zamiana tekstu danymi z tablicy za pomocą str_replace


(Gandio) #1

Witam posiadam w tablicy o nazwie lista pewne dane

Array ( [nazwa] => wartosc [nazwa] =>wartosc)

nie wiem ile tych danych bedzie. Chcialbym zamienic dane z tekstu w taki sposob ze kazdy tekst zawarty w nawiasach kwadratowych [] zamieni sie lacznie z nawiasami na cos w stylu

"[/code]
, poprostu chce ten tekst zawarty w nawiasach wstawic do nazwy obrazka.

probowalem wiele sposobow ostatnio zatrzymalem sie na tym

[code] $i=0; while($i { $str = str_replace("[$lista[$i]]", " ['.$lista[$i].'_s.png", $str); $i++; }](item,'.%24lista%5Bi%24%5D.')

ale zamierzonego efektu nie ma. Ma ktos jakis inny pomysl


(mario@) #2

Np.

<?php


$lista = array(

	"1" => "img1",

	"2" => "img2",

	"3" => "img3"

);


foreach($lista as $i=>$j)

	echo "";


?>[/code]

Jeżeli chodziło o nazwę klucza a nie jego wartość to $j zmień na $i (oczywiście nic nie stoi na przeszkodzie aby połączyć wartość z kluczem).

http://php.net/manual/en/control-structures.foreach.php


(Gandio) #3

Nie zupelnie o to mi chodzilo, pobieram tekst z bazy danych i tablice zreszta tez i chcialem zamienic niektore slowa z tekstu ktore sa ujete w nawiasach [] na dane z tablicy, tylko jesli wystepuja.

np w tablicy mamy

$lista = array(

   "ryba" => "11",

   "pies" => "32",

   "kot" => "12"

);

a w tekscie bedzie:

Czy [pies] goni za [kot].


(mario@) #4

No to zupełnie coś innego niż wynikało z pierwszego postu - a przynajmniej ja inaczej zrozumiałem :wink:.

<?php

$lista = array(

   "[ryba]" => "11",

   "[pies]" => "32",

   "[kot]" => "12"

);


$txt = "Czy [pies] goni za [kot].";

echo str_replace(array_keys($lista), array_values($lista), $txt);


?>

albo

<?php

$lista = array(

   "/\[ryba\]/i" => "11",

   "/\[pies\]/i" => "32",

   "/\[kot\]/i" => "12"

);



$txt = "Czy [Pies] goni za [kot].";

echo preg_replace(array_keys($lista), array_values($lista), $txt);


?>

Co do Twojego pierwszego kodu to masz tam błędy natury składniowej - inne zresztą też.


(Gandio) #5

dzieki juz mam zrobilem na podstawie Twojego 1 postu

foreach($lista as $i=>$j)


   $str = str_replace("[".$i."]", "", $str);[/code]

moze nie jest zbyt wydajne ale ujdzie w tloku