PHP Array

Hi,
ich schlage mich seit geraumer Zeit mit einer Function / Array rum. Leider finde ich nicht den Fehler:
Array: print_r($arrep):

Array: print_r($arrayREPLACE):

String: echo $html:

[quote]


  • -*-
  • [/quote]

    Fehler hafte Funktion:

    Und mit diesem Code gibt er mir nichts aus, außer “

  • ”:
    Falsche Ausgabe:

    [quote]


  • [/quote]

    Richtige Ausgabe wäre (per Hand geschrieben):

    [quote]


  • Startseite
  • [/quote]

    Warum ersetzt er nicht wie in der str_replace function bestimmt die “-*-” zeichen mit den jeweiligen Angaben? Ich hoffe jemand wird daraus schlau. Ich zur Zeit nicht mehr. Meines wissens ist alles eigentlich richtig oder ich stehe komplett auf dem Schlauch.

    Ein herzliches Dankeschön schon einmal im Vorraus fürs Helfen :slight_smile:

    mfg 99shi

    Gib mal bitte ein vollständiges, per Copy&Paste testbares Minimalbeispiel.

    Naja minimal Beispiel is einfach schlecht raus zu kopieren, weil sich die Füllun des Array mit Switch & Case über 412 Zeilen erstreckt.

    Das einzige was ich machen kann ist, das ich die Daten in ein Array schreibe und hier den Code poste:

    [code]#Html in String schreiben
    $html=’

  • -*-
  • ’;
    #Array Erstellung
    $arrayREPLACE=array();
    #Array erweitern
    $arrayREPLACE[]=“current”;
    $arrayREPLACE[]="/startseite.html";
    $arrayREPLACE[]=“Startseite”;

    #Den Array zählen
    $count=count($arrayREPLACE);
    #Notwendige Angaben erstellen
    $cc=1;$arrep=array();
    #Schleife laufen lassen zum ersetzen
    while($cc<=$count){
    $arrep[]="-*-";
    ++$cc;
    }

    #Array ersetzen durch -*- in html
    echo str_replace($arrep,$arrayREPLACE,$html);
    #FALSCHE Ausgabe[/code]
    (PS: Den Code habe ich hier schnell runter geschrieben und hoffe der is Fehlerfrei :smiley: )

    EDIT: Er ersetzt alle “-*-” zeichen mit dem ersten als $arrayREPLACE[0] das ist in diesem Fall immer “current”. Aber das ist ja Falsch weil das Array $arrayREPLACE noch weitere Daten enthält. (laut den manuals : http://php.net/manual/de/function.str-replace.php#example-4342 sollte die function aber alle der Reihe nach ersetzen.

    Zitat:

    $phrase = "Sie sollten taeglich Fruechte, Gemuese und Ballaststoffe essen."; $gesund = array("Fruechte", "Gemuese", "Ballaststoffe"); $lecker = array("Pizza", "Bier", "Eiscreme"); $newphrase = str_replace($gesund, $lecker, $phrase);

    Warum macht er es dann nicht bei mir? Im Prinzip ist es doch das selbe Prinzip.

    Die Funktion arbeitet genau wie erwartet.
    Als erstes tauscht er alle vorkommnisse des ersten Elements aus dem $search array mit dem ersten Element des $replace arrays. Was in deinem Fall: “--" mit “current” ist.
    Es wurden also alle "-
    -” durch “current” ersetzt und es sind dann keine “-*-” mehr für die anderen Fälle vorhanden.

    Nein, das ist nicht falsch.

    Zuerst wird der erste Wert aus $search im kompletten String durch den ersten Wert aus $replace ersetzt – jedes vorkommen dieses Wertes, nicht nur der erste.

    Und im nächsten Durchlauf sind dann gar keine “-*-” mehr im String enthalten – weil alle bereits ersetzt wurden. Also gibt es gar nichts mehr, was durch den zweiten oder dritten Eintrag deines replace-Arrays ersetzt werden könnte.

    Wenn du das so machen willst, dann musst du unterschiedliche Platzhalter verwenden für alle Stellen, an denen unterschiedliche Werte eingesetzt werden sollen.

    Für besser hielte ich es allerdings, gleich sprintf zu verwenden.

    Danke :hail:
    Ich stand grad wirklich auf dem Schlauch. Stimmt die Funktion sagt es ja auch schon ersetze das gefundene durch das zu ersetzende.

    Danke an euch beide noch mal (Bin jetzt nen Schritt zur Seite gegangen und steh nimmer auf dem Schlauch) .

    Jetzt funktioniert es wieder einbahnfrei.

    mfg 99shi