array sorteren op object property
Hallo allen,
ik ben nog steeds bezig met mijn cardGames class, maar nu wil ik mijn lijst met kaarten selecteren op object property.
Nu kan ik hier nergens een functie voor vinden, en zelf lukt het mij ook niet,,
(hij word gesorteerd naar:
7
6
8
8
9
A
Q
)
Dit is dus niet helemaal goed volgens mij.
Hij is gewoon exact hetzelfde als hij al was.
Heeft iemand enig idee hoe ik dit wel voor elkaar kan krijgen?
Dit is de code
Gegroet
ik ben nog steeds bezig met mijn cardGames class, maar nu wil ik mijn lijst met kaarten selecteren op object property.
Nu kan ik hier nergens een functie voor vinden, en zelf lukt het mij ook niet,,
(hij word gesorteerd naar:
7
6
8
8
9
A
Q
)
Dit is dus niet helemaal goed volgens mij.
Hij is gewoon exact hetzelfde als hij al was.
Heeft iemand enig idee hoe ik dit wel voor elkaar kan krijgen?
Dit is de code
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
function sortObject($object, $key)
{
for ($i = count($object) - 1; $i >= 0; $i--) {
$swapped = false;
for ($j = 0; $j < $i; $j++) {
switch ($object) {
case $object[$i]->$key == 'J':
$value = '11';
case $object[$i]->$key == 'Q':
$value = '12';
case $object[$i]->$key == 'K':
$value = '13';
case $object[$i]->$key == 'A':
$value = '14';
default:
$value = $object[$i]->$key;
}
if ($value < $object[$j + 1]->$key) {
$tmp = $object[$j];
$object[$j] = $object[$j + 1];
$object[$j + 1] = $tmp;
$swapped = true;
}
}
return $object;
}
}
?>
function sortObject($object, $key)
{
for ($i = count($object) - 1; $i >= 0; $i--) {
$swapped = false;
for ($j = 0; $j < $i; $j++) {
switch ($object) {
case $object[$i]->$key == 'J':
$value = '11';
case $object[$i]->$key == 'Q':
$value = '12';
case $object[$i]->$key == 'K':
$value = '13';
case $object[$i]->$key == 'A':
$value = '14';
default:
$value = $object[$i]->$key;
}
if ($value < $object[$j + 1]->$key) {
$tmp = $object[$j];
$object[$j] = $object[$j + 1];
$object[$j + 1] = $tmp;
$swapped = true;
}
}
return $object;
}
}
?>
Gegroet
Gesponsorde koppelingen:
Dat komt waarschijnlijk omdat je maar 1x door alle kaarten heel loopt. Je zou eigenlijk na elke 'swap' de loop weer opnieuw moeten beginnen (dus $i en $j moeten resetten).
maar door die 2 for loops zou hij het toch goed moeten doen?
Ja, maar het kan best zijn dat een derde entry ook groter is dan de eerste entry en daar dus voor moet komen. In jouw script gebeurt dat nu niet.
Neem bijvoorbeeld de reeks [6 7 6 8]. In 1 iteratie zou dat achter eenvolgens de volgende volgordes opleveren: [7 6 6 8] en uiteindelijk [7 6 8 6]. Maar zoals je ziet klopt dit niet, aangezien die 8 nog twee plaatsen verder omhoog moet. Dit krijg je alleen voor elkaar als je nog twee keer door dezelfde reeks heen loopt: [7 8 6 6] en dan nogmaals voor: [8 7 6 6].
ps. Wellicht dat je dit nog veel makkelijker met een array en een van de bijbehorende sort() functies kunt bereiken. De objecten vormen dan de waarden in een array en de hoogte van de kaart zet je in de bijbehorende keys. Sorteer op basis van de keys en lees vervolgens je objecten in de goede volgorde uit.
Neem bijvoorbeeld de reeks [6 7 6 8]. In 1 iteratie zou dat achter eenvolgens de volgende volgordes opleveren: [7 6 6 8] en uiteindelijk [7 6 8 6]. Maar zoals je ziet klopt dit niet, aangezien die 8 nog twee plaatsen verder omhoog moet. Dit krijg je alleen voor elkaar als je nog twee keer door dezelfde reeks heen loopt: [7 8 6 6] en dan nogmaals voor: [8 7 6 6].
ps. Wellicht dat je dit nog veel makkelijker met een array en een van de bijbehorende sort() functies kunt bereiken. De objecten vormen dan de waarden in een array en de hoogte van de kaart zet je in de bijbehorende keys. Sorteer op basis van de keys en lees vervolgens je objecten in de goede volgorde uit.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Je kan eens kijken naar usort. Daarmee laat je PHP sorteren regelen (PHP beslist voor je wat er geswapped gaat worden, en welke elementen vergeleken moeten worden) en het enige wat jij hoeft mee te geven is een vergelijk-functie die de twee elementen die PHP erin stopt met elkaar vergelijkt.
(ik neem aan dat PHP intern het quicksort algoritme gebruikt, wat sneller is dan jouw, zoals Blachne al zei onvolledige, algoritme)
(ik neem aan dat PHP intern het quicksort algoritme gebruikt, wat sneller is dan jouw, zoals Blachne al zei onvolledige, algoritme)
Ik probeer het nu met usort(), maar hij werkt nog steeds niet zoals ik wil.
Ik heb dus een functie geschreven die het moet gaan sorteren.
Maar hij pakt de A, K, Q, J niet goed.
Iemand nog een idee?
dit is de functie:
forget it,, breaks vergeten
Ik heb dus een functie geschreven die het moet gaan sorteren.
Maar hij pakt de A, K, Q, J niet goed.
Iemand nog een idee?
dit is de functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
static function cmp_value($a, $b)
{
switch ($a->value) {
case 'J':
$al = 11;
case 'Q':
$al = 12;
case 'K':
$al = 13;
case 'A':
$al = 14;
default:
$al = $a->value;
}
switch ($b->value) {
case 'J':
$bl = 11;
case 'Q':
$bl = 12;
case 'K':
$bl = 13;
case 'A':
$bl = 14;
default:
$bl = $b->value;
}
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
?>
static function cmp_value($a, $b)
{
switch ($a->value) {
case 'J':
$al = 11;
case 'Q':
$al = 12;
case 'K':
$al = 13;
case 'A':
$al = 14;
default:
$al = $a->value;
}
switch ($b->value) {
case 'J':
$bl = 11;
case 'Q':
$bl = 12;
case 'K':
$bl = 13;
case 'A':
$bl = 14;
default:
$bl = $b->value;
}
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
?>
forget it,, breaks vergeten
Gewijzigd op 01/01/1970 01:00:00 door Nicoow Unknown



