5 berichten aan het bekijken - 1 tot 5 (van in totaal 5)
  • Q:
    Bijdrager
    vmacaay

    [php] probleem met een for loop

    Ik heb een array gevuld met verschillende soorten data die ik uit een html file haal. Nu wil ik alle elementen die leeg zijn verwijderen uit de array. Dus ik dacht laat ik een loopje maken die kijkt of er in elke element iets staat.

    [code:1:1cdda41e90]
    $rooster = strip_tags($rooster);
    $rooster = explode(" ",$rooster);

    for($count = 0; $count < count($rooster); $count++){
    if($rooster[$count]=="" || $rooster[$count]==" " || $rooster[$count] == NULL){
    unset($rooster[$count]);
    }
    }
    [/code:1:1cdda41e90]

    De bovenstaande code verwijderd wel lege elementen maar hij slaat alle meervouden van 4 over. Dus element 4,8,12,16 worden niet verwijderd ook al zijn ze leeg. Als ik deze elementen apart test dan geeft hij aan dat ze leeg zijn en verwijderd ze ook.

    De array 670 elementen lang, na het loopje 357 lang. Als ik voor de array een extra record verwijder zoals element 4 dan blijft de array 357 lang. Dus hoe dan ook mijn array wordt niet kleiner dan 357.

    Ik zit momenteel best vast, ik heb gezocht naar een oplossing maar weet niet eens waar ik op moet zoeken. Als iemand mij kan helpen graag.

    Bijdrager
    danielpunt

    Ik vind het ook een onlogische constructie als ik eerlijk ben. Probeer deze code eens in plaats van het for loopje.:)
    [code:1:5121b04496]foreach ($rooster as $index => $value)
    {
    if ($value == null OR $value == ‘ ‘)
    unset($rooster[$index]);
    }[/code:1:5121b04496]

    Bijdrager
    PaneVino

    Terwijl je je array afloopt op nummer, gooi je nummers weg. hierdoor sla je er een aantal over…

    Ik zou het doen met :

    while ( $r = current($array))
    {
    if ( $r != “” ) { $array_tmp[] = $r; }
    next($array);
    }

    $array = $array_tmp;

    Dit is een heel simplistisch voorbeeld, dat de manier waarop jij het deed iets simpeler weergeeft.
    (Natuurlijk wel even die ‘if’ beter doen dan ik…)

    Bijdrager
    vmacaay

    Aha, dank U beide voor uw hulp. Ik heb inmiddels mijn het een en ander aangepast in mijn code. (Foreach gebruikt).

    Maar ik vind het ook heel fijn dat ik nu ook snap wat ik fout deed. Zeer en dan ook zeer bedankt!!!

    Bijdrager
    danielpunt
    ”PaneVino”

    Terwijl je je array afloopt op nummer, gooi je nummers weg. hierdoor sla je er een aantal over…

    Ik zou het doen met :

    while ( $r = current($array))
    {
    if ( $r != “” ) { $array_tmp[] = $r; }
    next($array);
    }

    $array = $array_tmp;

    Dit is een heel simplistisch voorbeeld, dat de manier waarop jij het deed iets simpeler weergeeft.
    (Natuurlijk wel even die ‘if’ beter doen dan ik…)

    Helaas gaat dat niet werken omdat er ook lege strings in de array zitten en die worden door PHP gezien als false.:)
    Als je dit gebruikt werkt het wel zoals het hoort :
    [code:1:d395d44f22]while(($r = current($array)) !== false)
    {
    // loop de loop
    }[/code:1:d395d44f22]

    Maar mijn foreach doet het ook prima zo te horen.:)

5 berichten aan het bekijken - 1 tot 5 (van in totaal 5)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.