Ben al eventjes aan het stoeien met een functie waar ik niet helemaal uit kom.
De functie is nodig omdat ik anders belachelijke IN-bereiken in de queries ga genereren, en die wil ik dus zoveel mogelijk reduceren.
Ik heb als basis een array met daarin ID's die opgehaald moeten worden waarin mogelijk opvolgende waardes in staan.
De functie tot dusver is prima in staat om de tussenliggende waardes weg te filteren, maar ik mis de stap nog om de bereiken daadwerkelijk te benoemen.
Als ik hier dus de array: 1, 2, 3, 4, 5, 8, 9, 10, 20, 30, 30, 30 als input op geef, krijg ik nu: 1, 5, 8, 10, 20, 30 terug...
Het eindresultaat zou moeten zijn : 1-5, 8-10, 20, 30
Dit eindresultaat kan dan in de querie gestopt worden als: WHERE id IN (1-5, 8-10, 20, 30)
Ik hoop dat iedereen me nog kan volgen
Zelf dacht ik dat er wel een tegenhanger van de range-functie zou zijn, maar die is er niet (of ik zie 'm over het hoofd)...
WIe helpt me uit de brand?
De functie is nodig omdat ik anders belachelijke IN-bereiken in de queries ga genereren, en die wil ik dus zoveel mogelijk reduceren.
Ik heb als basis een array met daarin ID's die opgehaald moeten worden waarin mogelijk opvolgende waardes in staan.
De functie tot dusver is prima in staat om de tussenliggende waardes weg te filteren, maar ik mis de stap nog om de bereiken daadwerkelijk te benoemen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| function reduceList ($arrInput) { print 'Data in: '.implode(', ', $arrInput).'<br />'; $arrInput = array_unique($arrInput); sort($arrInput); foreach ($arrInput as $key => $elem) { $nextVal = array_search(($elem+1), $arrInput); $nextNextVal = array_search(($elem+2), $arrInput); if ( (is_numeric($nextVal)) && (is_numeric($nextNextVal)) ) { unset($arrInput[$nextVal]); } } return 'Data uit: '.implode(', ', $arrInput).'<br />'; } |
Als ik hier dus de array: 1, 2, 3, 4, 5, 8, 9, 10, 20, 30, 30, 30 als input op geef, krijg ik nu: 1, 5, 8, 10, 20, 30 terug...
Het eindresultaat zou moeten zijn : 1-5, 8-10, 20, 30
Dit eindresultaat kan dan in de querie gestopt worden als: WHERE id IN (1-5, 8-10, 20, 30)
Ik hoop dat iedereen me nog kan volgen

Zelf dacht ik dat er wel een tegenhanger van de range-functie zou zijn, maar die is er niet (of ik zie 'm over het hoofd)...
WIe helpt me uit de brand?