login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Array sorteren werkt niet

Offline Voldemort - 01/08/2006 14:56
Avatar van VoldemortPHP ver gevorderde Ik heb deze code:

  1. <?php
  2. if(isset($_GET['order']) && $_GET['order'] == 'desc')
  3. $func = 'arsort';
  4. else
  5. $func = 'asort';
  6.  
  7. if(isset($_GET['by']))
  8. {
  9. if($_GET['by'] == 1)
  10. $func($monsters);
  11. elseif($_GET['by'] == 2)
  12. $func($monsters_hp,SORT_NUMERIC);
  13. else
  14. $func($monsters_exp,SORT_NUMERIC);
  15. }
  16. else
  17. $func($monsters);
  18. ?>


$monsters is een array waarvan de waarden allemaal een string zijn
$monsters_hp is een array waarvan de waarden allemaal een integer zijn
$monsters_exp is een array waarvan de waarden allemaal een integer zijn

Sorteren op $monsters werkt perfect. Alleen als ik sorteer op $monsters_hp en $monsters_exp doet ie dat niet. Dan sorteert hij op key oplopend (de default dus (als je geen sort functie gebruikt doet ie dat ook zo)). Zelf zie ik zo snel de fout niet. Jullie wel?

15 antwoorden

Gesponsorde links
Offline Stijn - 01/08/2006 15:04
Avatar van Stijn PHP expert gebruik de functie PHP.net: sort

  1. <?php
  2. $int_arr = array(1,5,3);
  3.  
  4. sort( $int_arr , SORT_NUMERIC );
  5.  
  6. var_dump( $int_arr);
  7. ?>


stijn
Offline Voldemort - 01/08/2006 15:07 (laatste wijziging 01/08/2006 15:07)
Avatar van Voldemort PHP ver gevorderde Maar ik wil de keys behouden en dat kan niet met sort. Enkel met a(r)sort
Offline Grayen - 01/08/2006 15:11
Avatar van Grayen PHP ver gevorderde moet je niet:
asort($array);
reset($array);
doen? want bij mij werkte het ook niet totdat ik dat deed.
Offline Voldemort - 01/08/2006 15:16 (laatste wijziging 01/08/2006 16:39)
Avatar van Voldemort PHP ver gevorderde Ik heb de code onder:

  1. else
  2. $func($monsters);


gezet en dat hielp niks (alle 3 de arrays gereset).

Als ik sort en rsort gebruik werkt het wel. Maar aangezien ik asort en arsort nodig heb werkt mijn code nog steeds niet. Weet iemand waarom het niet werkt?
Offline Rik - 01/08/2006 17:16 (laatste wijziging 01/08/2006 17:16)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Misschien met eval?
  1. <?php
  2. if (isset($_GET['order']) && $_GET['order'] == 'desc') {
  3. $func = 'arsort';
  4. } else {
  5. $func = 'asort';
  6. }
  7. $func .= '(';
  8. if(isset($_GET['by'])) {
  9. if($_GET['by'] == 1) {
  10. $func .= '($monsters)';
  11. } elseif ($_GET['by'] == 2) {
  12. $func .= '($monsters_hp, SORT_NUMERIC)';
  13. } else {
  14. $func .= '($monsters_exp, SORT_NUMERIC);
  15. }
  16. eval $func . ';';
  17. ?>
Offline Voldemort - 01/08/2006 17:46 (laatste wijziging 02/08/2006 10:34)
Avatar van Voldemort PHP ver gevorderde Werkt ook niet (heb je code een klein beetje moeten aanpassen wegens errors) .

  1. <?php
  2. if (isset($_GET['order']) && $_GET['order'] == 'desc')
  3. $func = 'arsort';
  4. else
  5. $func = 'asort';
  6.  
  7. if(isset($_GET['by']))
  8. {
  9. if($_GET['by'] == 1)
  10. $func .= '($monsters)';
  11. elseif ($_GET['by'] == 2)
  12. $func .= '($monsters_hp, SORT_NUMERIC)';
  13. else
  14. $func .= '($monsters_exp, SORT_NUMERIC)';
  15. }
  16. else
  17. $func .= '($monsters)';
  18.  
  19. eval($func.';');


Als ik echo $func; doe komt daar wel alles juist uit. Waarom werkt het niet??
Offline Simon - 02/08/2006 10:44
Avatar van Simon PHP expert
  1. <?php
  2. if (isset($_GET['order']) && $_GET['order'] == 'desc')
  3. $func = 'arsort';
  4. else
  5. $func = 'asort';
  6.  
  7. if(isset($_GET['by']))
  8. {
  9. if($_GET['by'] == 1)
  10. $func .= '('.$monsters.')';
  11. elseif ($_GET['by'] == 2)
  12. $func .= '('.$monsters_hp.', SORT_NUMERIC)';
  13. else
  14. $func .= '('.$monsters_exp.', SORT_NUMERIC)';
  15. }
  16. else
  17. $func .= '($monsters)';
  18.  
  19. eval($func.';');
probeer het eens met vars buiten quotes
Offline Voldemort - 02/08/2006 11:12 (laatste wijziging 02/08/2006 16:34)
Avatar van Voldemort PHP ver gevorderde Dacht niet dat dat zou werken, resultaat:

Citaat:
Parse error: syntax error, unexpected ',', expecting '(' in /home/quinten/www/hp-d_v30/site-account/duelleren/svp_home.php(97) : eval()'d code on line 1


Als ik echo $func doe (bij 1 van de mogelijkheden, anders is het asort ofzo):

Citaat:
arsort(Array, SORT_NUMERIC)


Edit: Mijn arrays (maar daar zit niet echt een fout in denk ik):

  1. <?php
  2. $monsters = array('Trol','Eenhoorn','Zompelaar','Flubberworm','Boomtrul',
  3. 'Meermens','Alf','Hippogrief','Tuinkabouter','Wierling',
  4. 'Delfstoffer','Beukwilg','Doxy','Ierse kabouter','Keltisch aardmannetje',
  5. 'Kwistel','Roodkopje','Slang','Schroeistaartige skreeft','Feniks',
  6. 'Sfinx','Weerwolf','Yeti','Basilisk','Gewone groene huisdraak',
  7. 'Hongaarse Hoornstaart','Roemeense Langhoorn','Zweedse Stompsnuit','Terzieler','Vuurkrab');
  8. $monsters_hp = array(150,210,60,10,35,
  9. 55,65,120,25,30,
  10. 5,300,15,20,40,
  11. 45,70,75,80,170,
  12. 200,230,240,350,250,
  13. 500,400,340,325,50);
  14. $monsters_exp = array(28,30,15,2,9,
  15. 17,18,29,7,8,
  16. 1,32,4,5,10,
  17. 12,22,25,27,30,
  18. 31,32,33,36,24,
  19. 40,38,37,35,13);
  20. ?>


Waar zit de fout?
Offline Rik - 02/08/2006 18:08 (laatste wijziging 02/08/2006 18:08)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Als ik het script uit je eerste post met de arrays erbij probeer doet ie het gewoon. Hij geeft geen fouten en volgens mij sorteert ie ook goed. 
Offline Voldemort - 02/08/2006 20:19
Avatar van Voldemort PHP ver gevorderde Hier niet .

(Suse Linux 10.0, Apache 2.2.0, PHP 4.4.2 op localhost)
Offline Rik - 03/08/2006 10:36 (laatste wijziging 03/08/2006 10:40)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Ik denk dat ik nu al weet waar het probleem zit, je sorteert maar een array, maar de andere twee moeten ook in die volgorde komen te staan, toch?

Bedoel je dit:
http://www.plaatscode.be/1677/

Edit:
Code op plaatscode.be gezet...

  1. $_GET['order'] = 'desc';
  2. $_GET['by'] = 1;
en
  1. print_r($monsters);
  2. print_r($monsters_hp);
  3. print_r($monsters_exp);
weggehaald, die waren alleen om te testen. 
Offline Voldemort - 03/08/2006 11:05
Avatar van Voldemort PHP ver gevorderde Dat werkt perfect (na enkele aanpassingen), alleen even dit nog:

  1. foreach($gesorteerde as $key => $mon)
  2. {
  3. $array1[] = $monsters[$key];
  4. $array2[] = $monsters_hp[$key];
  5. $array3[] = $monsters_exp[$key];
  6. }
  7.  
  8. foreach($array1 as $id => $mon)
  9. {


Kan dat niet met 1 foreach?
Offline Rik - 03/08/2006 12:09
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Waar haal jij die tweede foreach dan vandaan? 
Offline Voldemort - 03/08/2006 12:14
Avatar van Voldemort PHP ver gevorderde Voor alles uit de array te lezen en weer te geven in een tabel (en for voldoet niet omdat ik ook de key nodig heb).
Offline Rik - 03/08/2006 12:22
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Die keys staan in de eerste foreach nog in een andere volgorde.

Je zou count kunnen gebruiken om het id op te vragen en end voor het laatst aan array1 toegevoegde monster:
  1. foreach ($gesorteerde as $key => $value)
  2. {
  3. $array1[] = $monsters[$key];
  4. $array2[] = $monsters_hp[$key];
  5. $array3[] = $monsters_exp[$key];
  6. echo count($array1) - 1 . ' - ' . end($array1) . '<br />';
  7. }
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.308s