|
| sortering af array Fra : Martin |
Dato : 24-05-06 18:36 |
|
Hej
Nu har jeg prøvet stortset alle sort funktioner fra manualen (samt en
del af brugerenes) men ingen har den ønskede effekt, så nu bliver det
her
Nedenstående array skal først sorteres efter [3] (DESC) og bagefter [1]
(ASC)
Mine arrays har ingen keys (altså med navn), så jeg har kun tallet at gå
udfra. Dvs mit array IKKE ser sådan her ud
array("felt1"=>4200,"felt2"=>1000);
men sådan her ser det ud
array(4200,1000);
Herunder kommer mit array.
Håber på en lækker løsning. Det er ikke første gang jeg har haft
problemer med at sortere et array, så dette er ligeså meget til
fremtidig brug :)
Mit array ser noget ala sådan her ud (alt unødvendigt er skåret væk)
Array
(
[0] => Array
(
[1] => Forhandlernavn 4
...
[3] => 4200
...
)
[1] => Array
(
[1] => Forhandlernavn 3
...
[3] => 4800
...
)
[2] => Array
(
[1] => Forhandlernavn 2
...
[3] => 4300
...
)
[3] => Array
(
[1] => Forhandlernavn 1
...
[3] => 4000
...
)
)
| |
Jacob Atzen (24-05-2006)
| Kommentar Fra : Jacob Atzen |
Dato : 24-05-06 18:38 |
|
On 2006-05-24, Martin <maa@scandesigns.dk> wrote:
> Hej
>
> Nu har jeg prøvet stortset alle sort funktioner fra manualen (samt en
> del af brugerenes) men ingen har den ønskede effekt, så nu bliver det
> her
Har du kigget på array_multisort() og usort()?
--
Med venlig hilsen
- Jacob Atzen
| |
Martin (24-05-2006)
| Kommentar Fra : Martin |
Dato : 24-05-06 18:43 |
|
Jacob Atzen wrote:
> Har du kigget på array_multisort() og usort()?
Jeps det har jeg.
array_multisort() den kræver jo 2 forskllige arrays, men jeg har kun 1.
Jeg har ikke rigtig kunne tyde meningen med den helt præcist, så hvis
der måske er en der kan forklare mig funktionen i Clevin detajler, så
kunne det jo være det hjalp :)
| |
Jacob Atzen (24-05-2006)
| Kommentar Fra : Jacob Atzen |
Dato : 24-05-06 18:49 |
|
On 2006-05-24, Martin <maa@scandesigns.dk> wrote:
> Jacob Atzen wrote:
>> Har du kigget på array_multisort() og usort()?
>
> Jeps det har jeg.
>
> array_multisort() den kræver jo 2 forskllige arrays, men jeg har kun 1.
> Jeg har ikke rigtig kunne tyde meningen med den helt præcist, så hvis
> der måske er en der kan forklare mig funktionen i Clevin detajler, så
> kunne det jo være det hjalp :)
Følgende stump burde klare det:
function myCmp($a, $b) {
if($a[3] > $b[3]) {
return -1;
}
if($a[3] < $b[3]) {
return 1;
}
if($a[1] > $b[1]) {
return 1;
}
if($a[1] < $b[1]) {
return -1;
}
return 0;
}
usort($array, "myCmp");
--
Med venlig hilsen
- Jacob Atzen
| |
Martin (24-05-2006)
| Kommentar Fra : Martin |
Dato : 24-05-06 18:59 |
|
Jacob Atzen wrote:
> Følgende stump burde klare det:
>
> function myCmp($a, $b) {
> if($a[3] > $b[3]) {
> return -1;
> }
> if($a[3] < $b[3]) {
> return 1;
> }
> if($a[1] > $b[1]) {
> return 1;
> }
> if($a[1] < $b[1]) {
> return -1;
> }
> return 0;
> }
>
> usort($array, "myCmp");
Aha. Det virker jo bare supert, dog skulle jeg lige ændre -1 til 1 og 1
til -1 under [3] if'erne.
Men jeg må indrømme at jeg tror at jeg har fundet ud af at bruge
usort(), eller rettere, skal da lige hjem og lege med det efter arbejde her.
Men altså -1/1 trækker/ligger bare en fra/til af feltets position i arrayet.
Svært at forklare, men er det nogenlunde sådan det skal forstås?
| |
Jacob Atzen (24-05-2006)
| Kommentar Fra : Jacob Atzen |
Dato : 24-05-06 21:09 |
|
On 2006-05-24, Martin <maa@scandesigns.dk> wrote:
> Men altså -1/1 trækker/ligger bare en fra/til af feltets position i
> arrayet. Svært at forklare, men er det nogenlunde sådan det skal
> forstås?
Fra manualen:
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.
--
Med venlig hilsen
- Jacob Atzen
| |
|
|