Vraag & Antwoord

Webprogrammeren & scripting

[PHP] - foreach loop manipuleren

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: [url=http://ch2.php.net/manual/en/function.array-key-exists.php]array_key_exists[/url] zien of het nummer erbij zit en anders met [url=http://ch2.php.net/manual/en/function.in-array.php]in-array[/url] 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

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

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