Avatar billede Morten Professor
02. juni 2020 - 13:42 Der er 4 kommentarer

Søg og erstat ord med preg_replace, mit gennemløb virker ikke på teksten

Hej Jeg har et problem med preg_replace eller tror ikke det er den men en del i min kode der går at den ikke køre alle mine arrays igennem, så tekten bliver ændre alle de steder hvor jeg har et replace ord.
Den finder kun et ord i teksten og det er det første der bliver ændret så koden virker der.

Koden:

global $product;
        $content = [];
        $patterns1 = [];
        $replacements1 = [];
        $patterns = [];
    if (($handle = fopen("https://teenstyle.se/wp-content/plugins/teenstyle-word-replacer/Mappe1.CSV", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

            $comma_separated = str_replace(';', ', ', $data);
            $mapArray = array_map('utf8_encode', $comma_separated);
            $arrayTostring = implode(', ', $mapArray);

            $stringToArray = explode(', ', $arrayTostring);

            $country = $stringToArray[0];
            $orginalWord = $stringToArray[1];
            $replaceWord = $stringToArray[2];

            $product_full_description = $product->get_description();


            $patterns[] = $orginalWord;
            $replacements[] = $replaceWord;




            foreach (array_combine($patterns, $replacements) as $patterns2 => $replacements2) {

                $patterns1[] = "/".$patterns2."/";
                $replacements1[] = $replacements2;

                $content[] = preg_replace($patterns1, $replacements1, $product_full_description);

            }
            return implode("", $content);
        }

    }
    fclose($handle);

}

Med venlig hilsen
Morten
Avatar billede Morten Professor
02. juni 2020 - 13:45 #1
Er der nogle der kan slette link eller kan jeg selv gøre det?
Avatar billede Jan Seniormester
02. juni 2020 - 14:06 #2
det er fordi din while sætning kun er true 1 gang
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

når den har været true, og erstattet teksten, skal du nulstille den til false og køre videre.
Avatar billede Slater Ekspert
02. juni 2020 - 14:32 #3
Der er intet galt med løkken. $data bliver sat til non-false for hver gang af fgetcsv().

Men jeg må indrømme jeg ikke helt forstår spørgsmålet, og det er svært at teste selv, da vi ikke ved hvad $product->get_description(); gør.

Hvorfor bruger du overhovedet preg_replace i stedet for str_replace, når det kun er tekster der skal erstattes og ikke regex? Kan du evt. forklare problemet lidt bedre?
Avatar billede Morten Professor
02. juni 2020 - 14:37 #4
$product->get_description(); er en action i woo wordpress.
Som henter teksten og derfor $product_full_description = $product->get_description();
Så jeg kan sætte den der  $content[] = preg_replace($patterns1, $replacements1, $product_full_description);

Fordi jeg bruger preg_replace er fordi str_replace erstatter også feks. mørkegrå til darkgrå feks. den skal kun ændre det der står helt præcist. Så Hvis der står grå skal den kun ændre det, og ikke i andre ord.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester