Tässä olisi taas yksi näitä minun ikuisia kysymyksiä. Miten saada PHP:llä tehtyä str_replace vain ensimmäiseen esiintymään sanasta?
Ei mitenkään, ellet muokkaa itse PHP:tä.
Käytä tuon funktion tilalla vaikka tätä ja aseta limit ykköseksi: https://www.php.net/manual/en/function.preg-replace.php
Voihan sen helposti itsekin toteuttaa. Tässä on kaksi kommenteilla selostettua mallia:
function str_replace_kerran($haku, $korvaus, $teksti) { // Hae strpos-funktiolla tekstin paikka. // Jos ei löytynyt, palauta $teksti muuttumattomana. // Muuten erota substr-funktiolla $tekstistä $alku ja $loppu. // Palauta $alku.$korvaus.$loppu; }
function str_replace_kerran($haku, $korvaus, $teksti) { // Katkaise $teksti kahteen osaan explode-funktiolla (erottimena $haku). // Palauta osat yhdistettynä implode-funktiolla (erottimena $korvaus). }
Kannattaa harjoituksena toteuttaa molemmat. Muista jatkossa, että kaikkea ei tarvitse saada valmiina käteen, vaan jotain voi itsekin tehdä.
$raja = 1; str_replace( "jk", "jk", "jk", $raja );
jos siis php versio > 5
"Turha" muuttuja siksi koska toi vika parametri välitetään viittauksella eikä arvolla.
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
esajeejee kirjoitti:
"Turha" muuttuja siksi koska toi vika parametri välitetään viittauksella eikä arvolla.
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
Nimen count ja php.net mukaan kyse on suoritettujen korvausten määrästä ei suinkaan rajasta.
Alla vielä koodi joka vahvistaa asian.
<?php $data = file_get_contents("autot.txt"); $hakusana = "Chrysler"; $korvattava = "Jeep"; $maara = 1; //Ei vaikuta seuraavaan koodiriviin mitenkään, mutta voi sekoittaa koodin lukijaa. str_replace($hakusana, $korvattava, $data, $maara); echo "Datasta {$data} korvattiin {$maara} kertaa <b>{$hakusana}</b> sanalla <b>{$korvattava}</b>";
*** autot.txt Chrysler Jeep Lada Nissan Chrysler Plymouth Dodge Fiat Alfa Romeo Chrysler
Tulosteeksi tulee tällöin
testisivu kirjoitti:
Datasta Chrysler Jeep Lada Nissan Chrysler Plymouth Dodge Fiat Alfa Romeo Chrysler korvattiin 3 kertaa Chrysler sanalla Jeep
Kyllähän jo tuo pastattu php:n ohjekin sanoo, että parametri on count (suomeksi laskuri), eikä mikään raja.
Muokattu : Noniin, Teuro ehti sanoakin jo saman.
Aihe on jo aika vanha, joten et voi enää vastata siihen.