[PHP] asort 2D array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Volgens de functie omschrijving van asort() sorteert deze multi-array's eerst bij array length en dan by values. Maar ik wil alleen bij values sorteren...

voorbeeld asort($array):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array
(
    [fa4356af136d59d6cd40ee2a86720d28] => Array
        (
            [5854027a2421ad34a4a94ff8dd45c7fa] => 21:00
        )

    [15ab41c939f556fa0615c0c63b0fa4a4] => Array
        (
            [5854027a2421ad34a4a94ff8dd45c7fa] => 10:00
            [2233d360945dfc32107a55028f1f77c8] => 12:00
        )

)


...maar ik verwacht juist zoiets:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
Array
(
    [15ab41c939f556fa0615c0c63b0fa4a4] => Array
        (
            [5854027a2421ad34a4a94ff8dd45c7fa] => 10:00
            [2233d360945dfc32107a55028f1f77c8] => 12:00
        )
    [fa4356af136d59d6cd40ee2a86720d28] => Array
        (
            [5854027a2421ad34a4a94ff8dd45c7fa] => 21:00
        )
)


Ik zie iets over het hoofd, maar wat?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

Kijk aub op http://php.net/manual/en/function.asort.php.
Hij sorteert eerst op lengte van de array, en daarna op value! Dus eerste de array met 1 item, en daarna de array met 2 items. De array van 2 items is gesorteerd op tijd. Dus het eerste voorbeeld dat je geeft klopt helemaal.

[ Voor 45% gewijzigd door Creepy op 12-10-2010 17:48 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat jij zoekt is usort.

edit:
Wel een belangrijke vraag: hoe moet dit gesorteerd worden dan?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [fa4356af136d59d6cd40ee2a86720d28] => Array
        (
            [5854027a2421ad34a4a94ff8dd45c7fa] => 21:00
            [2233d360945dfc32107a55028f1f77c8] => 11:00
        )

    [15ab41c939f556fa0615c0c63b0fa4a4] => Array
        (
            [5854027a2421ad34a4a94ff8dd45c7fa] => 10:00
            [2233d360945dfc32107a55028f1f77c8] => 12:00
        )

)

[ Voor 91% gewijzigd door NMe op 12-10-2010 17:57 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het array met de tijden moet ASC gesorteerd worden. De array keys mogen niet veranderen. Ik heb al met een paar foreach loops iets geprobeerd, maar dan krijg ik de volgorde van de tijden niet goed.

Wie weet een andere functie of oplossing?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik zeg toch: usort? Zonder user defined sortfunctie ga je zoiets specifieks niet voorgekauwd vinden.

Op persoonlijke titel vind ik het overigens storend hoe sommige mensen het stereotype van PHP-programmeurs bevestigen door maar aan te nemen dat er voor elke specifieke eis een standaardfunctie in het framework zit. Programmeren is meer dan alleen het aan elkaar schakelen van functies.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@NME: ik deel je mening, maar als ik er zelf echt niet uit kom (zoals nu kom ik niet verder), dan post ik hier een vraag. Je moet toegeven dat asort() in mijn geval prima zou werken als deze geen ordening first by array length zou hebben.

uasort() zal ik moeten gebruiken, maar ik begrijp niet hoe die user defined functie in mijn situatie eruit zou moeten zien. Dus ik ga het array anders opstellen...

Bedankt voor de reacties! :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 13 oktober 2010 @ 09:24:
@NME: ik deel je mening, maar als ik er zelf echt niet uit kom (zoals nu kom ik niet verder), dan post ik hier een vraag. Je moet toegeven dat asort() in mijn geval prima zou werken als deze geen ordening first by array length zou hebben.
Maar dat is dus altijd het probleem. Heel veel dingen zouden bijna met een standaardfunctie kunnen maar toch net niet omdat ze net geen rekening houden met een bepaald specifiek geval.
uasort() zal ik moeten gebruiken, maar ik begrijp niet hoe die user defined functie in mijn situatie eruit zou moeten zien. Dus ik ga het array anders opstellen...
Als ik je reactie op mijn eerste vraag goed begrijp kun je dat inderdaad maar beter doen. Een element uit array 1 invoegen tussen twee elementen van array 2 (PHP kent niet echt multidimensionale arrays, het zijn arrays van arrays) werkt niet zo lekker, ook niet met u(a)sort volgens mij. Als je er een platte array van kan maken (array_merge) dan zou ik dat doen, dan kun je namelijk wel een sortfunctie uit het framework gebruiken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1