Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] - foreach loop manipuleren

Anoniem
None
8 antwoorden
  • G'day,

    Ik heb de volgende code (sterk ingekort):[code:1:5b0d1ad4fe]<?php
    $msgs = imap_sort ($stream, SORTARRIVAL, 1, SE_NOPREFETCH, "UNDELETED");
    $mail_amount = count ($msgs);

    $msgnumber = 0;

    foreach ($msgs as $i) {
    // een heel stuk code staat hier (in dit geval niet van belang)

    $msgnumber++;

    if ($msgnumber == 101) {
    break;
    }
    }
    ?>[/code:1:5b0d1ad4fe]

    De loop zal stoppen na 100 keer. Het is echter de bedoeling dat deze start bij het 51ste item, zodat er dan uiteindelijk maar 50 keer geloopt wordt.

    Waarom heb ik dit nodig? Het gaan om pagina's. Op pagina 1 is het geen probleem, dan begint hij bij 1 maar op pagina 2 moet hij beginnen met 51, pagina 2 met 101, …

    Is er een simpele (en vooral zeer snelle) manier om de eerste x aantal keer van een loop over te slaan?

    Greetz,
    BelgiumBoy_007
  • Een for-loop gebruiken, daar kan je veel beter de voorwaarden mee regelen waarmee de loop loopt.
  • Ik had eerst een for-loop, maar dat gaat niet meer.

    Eerst was het zo dat ik alle nummers tussen bvb. 50 en 101 nodig had, maar nu zullen er hier en daar wat nummers uit de reeks ontbreken …
  • dan zou ik toch een for loop gebruiken en dan error handling inbouwen zodat de code niet verstoord wordt bij missende nummers…
  • [quote:aa54990b0e="BelgiumBoy_007"]
    Waarom heb ik dit nodig? Het gaan om pagina's. Op pagina 1 is het geen probleem, dan begint hij bij 1 maar op pagina 2 moet hij beginnen met 51, pagina 2 met 101, …[/quote:aa54990b0e]
    Die laatste pagina 2 zal wel 3 moeten zijn. Als dat inderdaad zo is kun je het begin en einde beter berekenen.
    [code:1:aa54990b0e]
    $start = (($pagina - 1) * 50 ) +1;
    $einde = $start + 49;
    [/code:1:aa54990b0e]
    en dan een for loop

    wimb
  • [quote:bf0008db28="WimB"][quote:bf0008db28="BelgiumBoy_007"]
    Waarom heb ik dit nodig? Het gaan om pagina's. Op pagina 1 is het geen probleem, dan begint hij bij 1 maar op pagina 2 moet hij beginnen met 51, pagina 2 met 101, …[/quote:bf0008db28]
    Die laatste pagina 2 zal wel 3 moeten zijn. Als dat inderdaad zo is kun je het begin en einde beter berekenen.
    [code:1:bf0008db28]
    $start = (($pagina - 1) * 50 ) +1;
    $einde = $start + 49;
    [/code:1:bf0008db28]
    en dan een for loop

    wimb[/quote:bf0008db28]En wat als ik op bvb. pagina 1 zit en de nummers 20, 21, 22, 30 ontbreken uit de reeks?
  • Als het een key is kun je met: array_key_exists zien of het nummer erbij zit en anders met in-array of de waarde bestaat.

    wimb
  • Het probleem is ondertussen al opgelost …

    Ik ben tot de geniale ontdekking gekomen dat de array $msgs continu is maar de inhoud niet. Dit is zonder twijfel verkeerd geformuleerd dus even een demonstratie.[code:1:8b8b19a890]<?php
    print ("<pre>");
    print_r ($msgs);
    print ("</pre>");
    ?>[/code:1:8b8b19a890]GEEFT:[code:1:8b8b19a890]Array
    (
    [0] => 19
    [1] => 20
    [2] => 6
    [3] => 7
    [4] => 9
    [5] => 23
    [6] => 11
    [7] => 12
    [8] => 13
    [9] => 10
    [10] => 8
    [11] => 5
    [12] => 22
    [13] => 18
    [14] => 21
    [15] => 17
    [16] => 1
    [17] => 3
    [18] => 2
    [19] => 4
    [20] => 14
    [21] => 15
    [22] => 16
    )[/code:1:8b8b19a890]En daarmee is het wel doenbaar met een for-loop :P

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.