[PHP] Array sorteren op lengte

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende array:
PHP:
1
$array = array('a', 'aaaaaaaa', 'aaa', 'aa', 'aaaaaa');

Hoe kan ik deze array sorteren op lengte van de elementen? Met andere woorden: het resultaat moet zijn
PHP:
1
$array = array('aaaaaaaa', 'aaaaaa', 'aaa', 'aa', 'a');

Ik heb gekeken bij de array functies op php.net, maar daar staan alleen functies om te sorteren op alfabetische volgorde van de values of op numerieke volgorde van de keys.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op vrijdag 23 februari 2007 @ 13:57:
Ik heb de volgende array:
PHP:
1
$array = array('a', 'aaaaaaaa', 'aaa', 'aa', 'aaaaaa');

Hoe kan ik deze array sorteren op lengte van de elementen? Met andere woorden: het resultaat moet zijn
PHP:
1
$array = array('aaaaaaaa', 'aaaaaa', 'aaa', 'aa', 'a');

Ik heb gekeken bij de array functies op php.net, maar daar staan alleen functies om te sorteren op alfabetische volgorde van de values of op numerieke volgorde van de keys.
http://nl2.php.net/manual/en/function.usort.php

en dan een eigen functie maken die de lengte van de string bekijkt.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

PHP:
1
usort($array, create_function('$a,$b', 'return strlen($b) - strlen($a);'));
;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
crisp schreef op vrijdag 23 februari 2007 @ 14:01:
PHP:
1
usort($array, create_function('$a,$b', 'return strlen($b) - strlen($a);'));
;)
Die heb je uit de manual :>

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Wat je zou kunnen doen - maar dat is wellicht een hele foute manier - is een 2e array te maken met de lengtes van elke value en die sorteren. Dus:

[.......]

Ik was lekker een voorbeeldje aan het typen, toen ik dit bedacht:

[php]<?

$array_lengtes = array();
foreach ($array as $key => $value) {
$array_lengtes[$key] = strlen($value);
}

asort($array_lengtes);

$array_sorted = array();
foreach ($array_lengtes as $key => $value) {
$array_sorted[$key] = $array[$key];
}

unset($array);
unset($array_lengtes);

?>[/php]

Zal wel "fout" zijn of efficiënter kunnen :)


Ja dus :D

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jeetje, wat een snelle reakties! Dank je :)

@crisp - kan je misschien nog uitleggen wat je precies doet? Ik begrijp, na het lezen van http://nl3.php.net/usort dat $a en $b telkens values uit $array zijn.
The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.
Vervolgens vergelijk je $b met $a. Als $b langer is, schieten er tekens over...en...? Daarna ben ik het spoor bijster :'(

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

uh, nee; daar heet de array $sv en niet $array :P

Maar het verbaasd me niets dat dit voorbeeld ook letterlijk in de comments staat; het is een triviaal voorbeeld natuurlijk ;)
Verwijderd schreef op vrijdag 23 februari 2007 @ 14:08:
[...]

Vervolgens vergelijk je $b met $a. Als $b langer is, schieten er tekens over...en...? Daarna ben ik het spoor bijster :'(
nee, ik vergelijk de lengte van $b met die van $a

[ Voor 28% gewijzigd door crisp op 23-02-2007 14:12 ]

Intentionally left blank

Pagina: 1