foreach in PHP



  • Hallo zusammen, ich habe eine kleine, aber wichtige Frage:

    $arrFld = Array('lkjlkj','lkjlkj','lkjlkj');
     foreach($arrFld as $fld) $arrFld = 'Hallo Welt';
    

    Am Ende steht aber immer noch der Anfangswert drinnen, da Inhalte ders Array jeweils kopiert werden. Wie kann ich das verhirnden?

    Vielen Dank



  • Janus schrieb:

    Hallo zusammen, ich habe eine kleine, aber wichtige Frage:

    $arrFld = Array('lkjlkj','lkjlkj','lkjlkj');
     foreach($arrFld as $fld) $arrFld = 'Hallo Welt';
    

    Am Ende steht aber immer noch der Anfangswert drinnen, da Inhalte ders Array jeweils kopiert werden. Wie kann ich das verhirnden?

    Vielen Dank

    Die einzelnen Arrayelemente werden folgendermaßen in einen String verwandelt und ausgegeben:

    foreach($Array as $key => $content)
    {
        echo "Das Element mit dem Schlüssel ".$key." hat den Wert ".$content."<br />";
    }
    

    Einem Arrayfeld wird wie folgt ein Wert zugewiesen:

    $array = array("wert", "wert", "wert", "wert", "wert");
    for ($i = 0; $i < count($array); ++$i)
    {
        $array[$i] = "hallo welt";
    }
    


  • ich löse das immer so,

    foreach($Array as $key => $content)
    {
        $Array[$key] = 'Hallo Welt';
    }
    

    hoffe das phpforech macht nicht wiklich eine copie, sonst wäre ja das normale for schneller!


  • Mod

    Gerard schrieb:

    hoffe das phpforech macht nicht wiklich eine copie, sonst wäre ja das normale for schneller!

    es macht COW
    aber foreach ist seit php 4.10 und php 5 schneller als for 😉

    seit php 5 kann man
    foreach($arr as key => &value)
    verwenden

    und schon ist $value eine referenz

    kopieren ist in PHP 4 oft schneller als referenzen zu nehmen, in PHP 5 sind referenzen schneller.

    Edit:
    bei for() bitte immer dieses idiom verwenden:

    for($i=0, $c=count($arr); $i<$c; ++$i)
    

    weil das wiederholte count() lahm ist.


Anmelden zum Antworten