replace verschachtelt oder mit array

rernanded

Erfahrenes Mitglied
Hallo,
ich muß in mehreren Spalten einer Tabelle mehrere Zeichen ersetzen.

Tabelle=litseiten
Spalte1=inhalt
Spalte2=titel
Spalte3=beschr
Spalte4=hauptw

Ersetzt werden sollen ue durch ü, ae durch ä, oe durch ö, Ue durch Ü, Ae durch Ä, Oe durch Ö.

Mein sql-Ansatz:
sql = "UPDATE litseiten SET inhalt = REPLACE(inhalt,'ue','ü')";

Wer kann weiterhelfen? Vielleicht mittels array(s) oder mehreren sql?

MONI
 
Zuletzt bearbeitet:
Wenn du es mit Arrays machen willst sieht es in etwa so aus...
PHP:
<?php

// Der String wo die Umlaute ersetz werden sollen
$str = "Das ist ein Uebungstext zur Aenderung von Umlauten";

// welche Umlaute sollen ersetz werden
$matches = array('ae', 'ue', 'oe', 'Ae', 'Ue', 'Oe');
$replaces = array('ä', 'ü', 'ö', 'Ä', 'Ü', 'Ö');

// Ersetzen durchführen
$inhalt = str_replace($matches, $replaces, $str);
 
Naja, Arrays können da weiterhelfen

PHP:
$replaces[] = array('from' => 'ae', 'to' => 'ä');
$replaces[] = array('from' => 'Ae', 'to' => 'Ä');
//TODO: weitre Ersetzungen auflisten

$cols[] = 'inhalt';
$cols[] = 'titel';
//TODO: weitere Felder auflisten

$replacePattern = '`%1$s` = REPLACE(`%1$s`, `%2$s`, `%3$s`)';

foreach($replaces as $replace){
    //Die Ersezungen für jedes Feld zusammenstellen
    $replacesSql = array();
    foreach($cols as $col){
        $replacesSql[] = sprintf($replacePattern, $col, $replace['from'], $replace['to']);
    }
    //SQL zusammenstellen und ausführen
    $sql = 'UPDATE litseiten SET ' . implode(', ', $replacesSql);
    mysql_query($sql);
}
 
Hi Psychomentis
Danke soweit. Brauche aber sql um in meiner DB-Tabelle zu ändern und keine Umwandlung bei der Ausgabe.
MONI
 
Hi Yaslaw und danke. Das hier kapier ich nicht:
PHP:
$replacePattern = '`%1$s` = REPLACE(`%1$s`, `%2$s`, `%3$s`)';
Moni
 
Damit gehen wir nachher auf sprintf().
Ich geb sprintf() diesen String und 3 Argumente mit. Das erste Argument ersetzt %1$s. Das Zweite %2$s etc.

Ich könnte innerhalb der Schleife das folgende schreiben. Aber mir gefällts mit sprintf() besser *g*
PHP:
$replacesSql[] = "`{$col}` = REPLACE(`{$col}`, `{$replace['from']}`, `{$replace['to']}`)";
 
Damit gehen wir nachher auf sprintf().
Ich geb sprintf() diesen String und 3 Argumente mit. Das erste Argument ersetzt %1$s. Das Zweite %2$s etc.

Ich könnte innerhalb der Schleife das folgende schreiben. Aber mir gefällts mit sprintf() besser *g*
PHP:
$replacesSql[] = "`{$col}` = REPLACE(`{$col}`, `{$replace['from']}`, `{$replace['to']}`)";

Danke Dir, werde alles mal ausprobieren.

Moni
 

Neue Beiträge

Zurück