[PHP] ruzie met array_flip

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

Topicstarter
Ik ben bezig met een country detection script (ik weet het; ben niet de eerste maar doe het voor de verandering zonder een jumbo mysql database) en nou loop ik tegen het volgende aan:

Aan de bezoeker wordt gevraagd of het land dat staat aangegeven klopt. Zo ja, niets aan de hand. Zo nee, dan komt er een pulldown menu tevoorschijn waarin ze het juiste land kunnen selecteren.

Nu ziet mijn landcode tabel er zo uit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$countries =  array(
'TH' => 'Thailand',
'TJ' => 'Tajikistan',
'TK' => 'Tokelau',
'TM' => 'Turkmenistan',
'TN' => 'Tunisia',
'TO' => 'Tonga',
'TP' => 'East Timor',
'TR' => 'Turkey',
'TT' => 'Trinidad and Tobago',
'TV' => 'Tuvalu',
'TW' => 'Taiwan');


oftewel, gesorteerd op landcode. Zoals je hierboven kunt zien, hoort 'East Timor' natuurlijk bij de E thuis en niet tussen de T. Dus ik dacht, flippen & sorteren:

PHP:
1
2
3
$countries = array_flip($countries); // key 2 values, values to keys
arsort($countries); // sort, maintain index ass.
$countries = array_flip($countries); // key 2 values, values to keys


En toch blijft hij het verkeerd doen.... Ik krijg gewoon de oude array terug!

Ik zal wel iets heel stoms over het hoofd zien, maar op GoT, php.net en in de manual kan ik het niet vinden...

Ter info (hier ziet bovenstaande code al in):
http://wnailer.vddh.com/index.php?pag=cc

anyone?

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Wellicht kun je beter asort() gebruiken. Ik zie in de PHP manual weinig informatie staan over wat sort() doet met associatieve arrays, maar wel dat asort() (en ksort()) hier eigenlijk voor bedoeld zijn. Het voorbeeld dat zij geven in de handleiding komt ook precies overeen met wat jij hier wilt bereiken. Het scheelt ook nog eens een boel geflip.

Bovendien lijkt me dat als sort() goed werkt op associatieve arrays, hij op waarden sorteerd. Als je ze dus eerst flipped, dan sorteert, en weer terug flipt, zijn je arrays dus gesorteerd op de keys: TN, TK, etcetera. Dan krijg je inderdaad je 'oude' array, die al op keys gesorteerd was.

Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

Topicstarter
doe nu het volgende (volgens de manual):

PHP:
1
2
arsort($countries);
reset($countries);


en het sorteren gaat nu beter; is alleen nog maar achterste voren! ;-)

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • Cipri
  • Registratie: Januari 2001
  • Laatst online: 29-07-2024

Cipri

Of niet natuurlijk...

arsort sorteert op value, niet op key. Als je op naam wil sorterne, dat geflip weg laten:
PHP:
1
2
3
4
arsort($countries); // sort, maintain index ass.
$countries = array_flip($countries); // key 2 values, values to keys
$countries = array_reverse($countries); //Order alphabeticly
print_r($countries);

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array
(
    [TP] => East Timor
    [TW] => Taiwan
    [TJ] => Tajikistan
    [TH] => Thailand
    [TK] => Tokelau
    [TO] => Tonga
    [TT] => Trinidad and Tobago
    [TN] => Tunisia
    [TR] => Turkey
    [TM] => Turkmenistan
    [TV] => Tuvalu
)


Alstu :)

-=[ Murlocs Ate My Boots]=- Sylvanas Alliance - EU - Orosei lvl 100 Paladin


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Waarom gebruik je arsort??? Uit de handleiding:
asort -- Sort an array and maintain index association
arsort -- Sort an array in reverse order and maintain index association
Het lijkt me dat je hier dus gewoon asort wilt gebruiken, dan hoef je je lijst niet meer om te draaien. Wat betreft die code van Cipri: sorteren op waarde was juist de bedoeling! Verder snap ik niet waarom je in jouw code een enkele flip doet, en toch nog op de juiste combinatie van keys/values uit denkt te komen. Als je op keys wilt sorteren, gebruik dan gewoon ksort.

Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

Topicstarter
ow f*ck, helemaal niet op de aRsort gelet... :)

tnx heren!

en nee, ik houd niet van voetbal... :)

Pagina: 1