login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Reeksen returnen (Opgelost)

Offline Aar - 18/11/2010 13:34
Avatar van AarPHP interesse Stel, ik heb de getallen

110,113,114,115,120,123,124,125,126,127,128,130 in een array staan.

Hoe kan ik kijken welke delen van deze getallen oplopend zijn en dit echo'en in iets als:
110, 113-115, 120, 123-128,130

Iemand enig idee hoe je dit mooi op kan lossen?

2 antwoorden

Gesponsorde links
Offline Koen - 18/11/2010 19:18
Avatar van Koen PHP expert
  1. <?php
  2. function checkRanges($array)
  3. {
  4. // paar values setten
  5. $prev = 0;
  6. $output = $subset = array();
  7. if(is_array($array) && sizeof($array))
  8. {
  9. // eventuele associatieve keys verwijderen
  10. $array = array_values($array);
  11. // door de array loopen
  12. foreach($array as $k => $value)
  13. {
  14. // bij de eerste uitvoering is $k = 0 -> false
  15. if($k && $value == ($prev + 1))
  16. {
  17. // We zijn voorbij de eerste lus en het huidige getal volgt op het vorige
  18. if(sizeof($subset))
  19. {
  20. // Getalletje toevoegen aan de range
  21. $subset[] = $value;
  22. }
  23. else
  24. {
  25. // Eerste twee getallen uit de range
  26. $subset = array($prev, $value);
  27. }
  28. }
  29. else
  30. {
  31. // output genereren
  32. if(sizeof($subset))
  33. {
  34. // We zitten met een range (met als einde het vorige getal)!
  35. array_pop($output);
  36. $output[] = array_shift($subset) . '-' . array_pop($subset);
  37. $output[] = $value;
  38. $subset = array();
  39. }
  40. else
  41. {
  42. // Gewoon getalletje :)
  43. $output[] = $value;
  44. }
  45. }
  46. $prev = $value;
  47. }
  48. return $output;
  49. }
  50. else
  51. {
  52. return false;
  53. }
  54. }
  55. $array = array(110,113,114,115,120,123,124,125,126,127,128,130);
  56. echo implode(', ', $array) . PHP_EOL;
  57. echo implode(',', checkRanges($array));


Deed het voor mij, er staat voldoende uitleg in de code. 
Bedankt door: Aar
Offline Aar - 18/11/2010 23:05 (laatste wijziging 18/11/2010 23:05)
Avatar van Aar PHP interesse Wow, thnx 
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.207s