login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Array sorteren (Opgelost)

Offline Voldemort - 01/07/2007 18:12
Avatar van VoldemortPHP ver gevorderde Beste,

Ik wil een array hoofdletterongevoelig sorteren (de waarden). Bv.

Citaat:
dinga
Dingb
aapa
Aapb


==>

Citaat:
aapa
Aapb
dinga
Dingb


en niet (zoals ie het nu doet)

Citaat:
Aapb
aapa
Dingb
dinga


Ik gebruik nu de functies:

sort
rsort
asort
arsort

maar deze houden zijn hoofdlettergevoelig.

Ik las op de sort info pagina: PHP.net: sort dit (een reactie van iemand):

Citaat:
The usort function can be used to sort multi-dimension arrays, also.

To do a case-insensitive sort on the 7th column of a two-dimensional array:
usort($listing, create_function('$a,$b','return strcasecmp($a[7],$b[7]);'));

When using associative arrays:
usort($listing, create_function('$a,$b','return strcasecmp($a["name"],$b["name"]);'));

Case-sensitive, descending (just change '$a,$b' to '$b,$a'):
usort($listing, create_function('$b,$a','return strcmp($a["name"],$b["name"]);'));

A two-dimensional array of numbers (7th column, ascending):
usort($listing, create_function('$a,$b','return $a[7]==$b[7]?0:($a[7]<$b[7]?-1:1);'));


Alleen snap ik dit niet echt, kan iemand het uitleggen? Kan ik hier m'n volledige array hoofdletterongevoelig met laten sorteren? Hoe dan?

13 antwoorden

Gesponsorde links
Offline JBke - 01/07/2007 18:17 (laatste wijziging 01/07/2007 18:23)
Avatar van JBke PHP gevorderde om array's not case sensitive te sorteren gebruik ik steeds PHP.net: array_multisort()
  1. <?php
  2. $array_var = Array("Cheery", "zap", "Banana", "apple", "Zing");
  3.  
  4. array_multisort((strtolower($array_var)), SORT_ASC, SORT_STRING, $array_var);
  5. ?>


dit is een voorbeeld.
Offline Voldemort - 02/07/2007 11:31 (laatste wijziging 04/07/2007 17:36)
Avatar van Voldemort PHP ver gevorderde @JBke: Met jouw code krijg ik een error:

Citaat:
Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in /home/quinten/www/array_test.php on line 7


En hij sorteert niks. Iemand die de oplossing voor dit probleem kent?
Offline markpieper - 04/07/2007 20:37
Avatar van markpieper HTML beginner Wat doet deze: http://nl3.php....sesort.php
Offline Simon - 04/07/2007 21:39
Avatar van Simon PHP expert @JBke, je kan strtolower() niet gebruiken op een array

  1. <?php
  2. $array_var = Array("Cheery", "zap", "Banana", "apple", "Zing");
  3. foreach($array_var as $key => $value) {
  4. $array_var_new[$key] = strtolower[$value];
  5. }
  6. array_multisort($array_var_new, SORT_ASC, SORT_STRING, $array_var);
  7. ?>

ik weet dat het wat omslachtig is, maja
Offline JBke - 04/07/2007 21:43 (laatste wijziging 04/07/2007 21:47)
Avatar van JBke PHP gevorderde klopt ja had het ooit ergens gezien denk op php.net en heb het zo terug opgesteld denk dat ik dat even overzien had thx voor de aanpassing, in elk geval zou de gedachte moeten kloppen en zou het script moeten werken.:D

maar blijkbaar kan je inderdaad beter natcasesort($array); gebruiken die ook hoofdletter ongevoelig is. Deze heb ik zelf echter nog niet gebruikt.
Offline Voldemort - 04/07/2007 22:06
Avatar van Voldemort PHP ver gevorderde Is er ook een versie van natcasesort die in omgekeerde volgorde (DESC) sorteert?
Offline JBke - 04/07/2007 22:10
Avatar van JBke PHP gevorderde dat moet je/ik even opzoeken, zal het posten als ik het vind. anders bedenk ik er wel iets op. kan je de array die gesorteerd is niet gewoon omdraaien na het sorteren???
Offline BramBo - 04/07/2007 22:13
Avatar van BramBo JS gevorderde yup gewoon reversen:
array_reverse($array);
http://www.php.net/array-reverse
Offline Voldemort - 04/07/2007 22:21 (laatste wijziging 04/07/2007 22:25)
Avatar van Voldemort PHP ver gevorderde @BramBo: Daar zat ik ook net naar te kijken, maar die behoudt de keys niet. Dus dat is geen optie.

Edit: Ik heb die functie nog wat beter bekeken en zag de tweede parameter die de keys behoud, ik test even alles.
Offline JBke - 04/07/2007 22:24
Avatar van JBke PHP gevorderde yep dat klopt als je de keys ook wil behouden moet je je array dupliceren met array_keys en een controle bijhouden op de sort en die tevens toepassen op de array met je keys en die terug mergen. is lastig en omslachtig daarom dat ik denk dat je misschien toch beter met die array_multisort kan verderwerken die staat trouwens ergens op php.net bij PHP.net: sort()
Offline BramBo - 04/07/2007 22:26
Avatar van BramBo JS gevorderde ik quote van php.net
Citaat:
Beschrijving
array array_reverse ( array $array [, bool $preserve_keys] )

array_reverse() krijgt een input array en geeft een nieuwe array terug waarin de elementen in omgekeerde volgorde staan, waarbij de keys worden gehandhaafd wanneer de preserve_keys TRUE is.
Offline Thomas - 05/07/2007 11:22
Avatar van Thomas Moderator @Simon: Om een functie toe te passen op alle elementen (values) gebruik je array_map.

Dus zoiets:
  1. <?php
  2. $lower_variant = array_map('strtolower', $original_array);
  3. asort($lower_variant);
  4. ?>


Done?
Offline Voldemort - 05/07/2007 11:33
Avatar van Voldemort PHP ver gevorderde @FangorN: Dan zijn de waarden wel goed gesorteerd, maar allemaal lowercase en dat mag niet.

Die natcasesort($array) en array_reverse($array,TRUE) werken prima.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.276s