/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Sortere multidimensionelt array
Fra : Jens


Dato : 12-05-05 23:05

Pyyh, dette driller mig 4 wild!!111

Jeg vil sortere nedenstående MDarray efter "diff" DESC og dernæst "pos"
DESC, men hvordan? Jeg har prøvet alt muligt, læst alt muligt og nu trænger
jeg til eksperters hjælp

mit array:
$tempArrayMulti[] = array(
"holdID" => $tempArray[$w]['holdID'], "pos" => $pos, "neg" =>
$neg, "diff" => ($pos/$neg)
);


mvh.

Jens



 
 
Johan Holst Nielsen (13-05-2005)
Kommentar
Fra : Johan Holst Nielsen


Dato : 13-05-05 08:42

Jens wrote:
> Pyyh, dette driller mig 4 wild!!111
>
> Jeg vil sortere nedenstående MDarray efter "diff" DESC og dernæst "pos"
> DESC, men hvordan? Jeg har prøvet alt muligt, læst alt muligt og nu trænger
> jeg til eksperters hjælp
>
> mit array:
> $tempArrayMulti[] = array(
> "holdID" => $tempArray[$w]['holdID'], "pos" => $pos, "neg" =>
> $neg, "diff" => ($pos/$neg)
> );

Umiddeltbart ville jeg nok gøre således (kan ikke afvise det kan gøre
MEGET nemmere).

$tempArrayMulti = array();
// Tilføj data
$sortArray = array();
$resultArrayMulti = array();
foreach($tempArrayMulti as $key=>$a) {
$sortArray[$key] = $a['diff'].'_'.$a['pos'];
}
arsort($sortArray);
reset($sortArray);
foreach($sortArray as $key=>$whatever) {
$resultArrayMulti[] = $tmpArrayMulti[$key];
}
var_dump($resultArrayMulti);


Det burde virke... men det er dog lidt afhængig af hvad post og diff
indeholder? Kan du give nogle eksempler fra "reallife" - så er det måske
lidt nemmere... hvis det begge er integers ville jeg nok f.eks. lave
værdien af $sortArray om til en integer (diff.pos). :) Lad mig høre lidt
mere :)

mvh
Johan

Jens (13-05-2005)
Kommentar
Fra : Jens


Dato : 13-05-05 10:22

Tak for dit svar. Mit array indeholder f.eks. følgende:

Array ( [0] => Array ( [holdID] => 44 [pos] => 18 [neg] => 20 [diff] =>
0.9 ) [1] => Array ( [holdID] => 46 [pos] => 22 [neg] => 12 [diff] =>
1.8333333333333 ) [2] => Array ( [holdID] => 47 [pos] => 14 [neg] => 22
[diff] => 0.63636363636364 ) )

Mvh

"Johan Holst Nielsen" <spam@phpgeek.dk> skrev i en meddelelse
news:42845a59$0$50662$edfadb0f@dread14.news.tele.dk...
> Jens wrote:
>> Pyyh, dette driller mig 4 wild!!111
>>
>> Jeg vil sortere nedenstående MDarray efter "diff" DESC og dernæst "pos"
>> DESC, men hvordan? Jeg har prøvet alt muligt, læst alt muligt og nu
>> trænger jeg til eksperters hjælp
>>
>> mit array:
>> $tempArrayMulti[] = array(
>> "holdID" => $tempArray[$w]['holdID'], "pos" => $pos, "neg" =>
>> $neg, "diff" => ($pos/$neg)
>> );
>
> Umiddeltbart ville jeg nok gøre således (kan ikke afvise det kan gøre
> MEGET nemmere).
>
> $tempArrayMulti = array();
> // Tilføj data
> $sortArray = array();
> $resultArrayMulti = array();
> foreach($tempArrayMulti as $key=>$a) {
> $sortArray[$key] = $a['diff'].'_'.$a['pos'];
> }
> arsort($sortArray);
> reset($sortArray);
> foreach($sortArray as $key=>$whatever) {
> $resultArrayMulti[] = $tmpArrayMulti[$key];
> }
> var_dump($resultArrayMulti);
>
>
> Det burde virke... men det er dog lidt afhængig af hvad post og diff
> indeholder? Kan du give nogle eksempler fra "reallife" - så er det måske
> lidt nemmere... hvis det begge er integers ville jeg nok f.eks. lave
> værdien af $sortArray om til en integer (diff.pos). :) Lad mig høre lidt
> mere :)
>
> mvh
> Johan



Johan Holst Nielsen (13-05-2005)
Kommentar
Fra : Johan Holst Nielsen


Dato : 13-05-05 10:46

Jens wrote:
> Tak for dit svar. Mit array indeholder f.eks. følgende:
>
> Array ( [0] => Array ( [holdID] => 44 [pos] => 18 [neg] => 20 [diff] =>
> 0.9 ) [1] => Array ( [holdID] => 46 [pos] => 22 [neg] => 12 [diff] =>
> 1.8333333333333 ) [2] => Array ( [holdID] => 47 [pos] => 14 [neg] => 22
> [diff] => 0.63636363636364 ) )

Lige et hurtigt spørgsmål - er der max 14 tal efter kommaet? :) Er lidt
vigtig for at kunne lave en nem løsning ;)

mvh
Johan

Jens (13-05-2005)
Kommentar
Fra : Jens


Dato : 13-05-05 10:56

Der er ikke noget max antal decimaler, hvor mange bør jeg have? tænker at
køre dem igennem round(); hvis det er nødvendigt.



"Johan Holst Nielsen" <spam@phpgeek.dk> skrev i en meddelelse
news:42847774$0$79460$14726298@news.sunsite.dk...
> Jens wrote:
>> Tak for dit svar. Mit array indeholder f.eks. følgende:
>>
>> Array ( [0] => Array ( [holdID] => 44 [pos] => 18 [neg] => 20 [diff] =>
>> 0.9 ) [1] => Array ( [holdID] => 46 [pos] => 22 [neg] => 12 [diff] =>
>> 1.8333333333333 ) [2] => Array ( [holdID] => 47 [pos] => 14 [neg] => 22
>> [diff] => 0.63636363636364 ) )
>
> Lige et hurtigt spørgsmål - er der max 14 tal efter kommaet? :) Er lidt
> vigtig for at kunne lave en nem løsning ;)
>
> mvh
> Johan



Jens (13-05-2005)
Kommentar
Fra : Jens


Dato : 13-05-05 10:59

Den sorterer "diff" helt fint, men fejler på følgende;

pos = 20 / neg = 10
pos = 10 / neg = 5

sorterer med pos = 10 / neg = 5 øverst :/


"Johan Holst Nielsen" <spam@phpgeek.dk> skrev i en meddelelse
news:42845a59$0$50662$edfadb0f@dread14.news.tele.dk...
> Jens wrote:
>> Pyyh, dette driller mig 4 wild!!111
>>
>> Jeg vil sortere nedenstående MDarray efter "diff" DESC og dernæst "pos"
>> DESC, men hvordan? Jeg har prøvet alt muligt, læst alt muligt og nu
>> trænger jeg til eksperters hjælp
>>
>> mit array:
>> $tempArrayMulti[] = array(
>> "holdID" => $tempArray[$w]['holdID'], "pos" => $pos, "neg" =>
>> $neg, "diff" => ($pos/$neg)
>> );
>
> Umiddeltbart ville jeg nok gøre således (kan ikke afvise det kan gøre
> MEGET nemmere).
>
> $tempArrayMulti = array();
> // Tilføj data
> $sortArray = array();
> $resultArrayMulti = array();
> foreach($tempArrayMulti as $key=>$a) {
> $sortArray[$key] = $a['diff'].'_'.$a['pos'];
> }
> arsort($sortArray);
> reset($sortArray);
> foreach($sortArray as $key=>$whatever) {
> $resultArrayMulti[] = $tmpArrayMulti[$key];
> }
> var_dump($resultArrayMulti);
>
>
> Det burde virke... men det er dog lidt afhængig af hvad post og diff
> indeholder? Kan du give nogle eksempler fra "reallife" - så er det måske
> lidt nemmere... hvis det begge er integers ville jeg nok f.eks. lave
> værdien af $sortArray om til en integer (diff.pos). :) Lad mig høre lidt
> mere :)
>
> mvh
> Johan



Jens (13-05-2005)
Kommentar
Fra : Jens


Dato : 13-05-05 11:07

Den sorterer umiddelbart helt efter hensigten Tusind tak for hjælpen.


"Jens" <jens@listic.dk> skrev i en meddelelse
news:42847a6a$0$78285$157c6196@dreader1.cybercity.dk...
> Den sorterer "diff" helt fint, men fejler på følgende;
>
> pos = 20 / neg = 10
> pos = 10 / neg = 5
>
> sorterer med pos = 10 / neg = 5 øverst :/
>
>
> "Johan Holst Nielsen" <spam@phpgeek.dk> skrev i en meddelelse
> news:42845a59$0$50662$edfadb0f@dread14.news.tele.dk...
>> Jens wrote:
>>> Pyyh, dette driller mig 4 wild!!111
>>>
>>> Jeg vil sortere nedenstående MDarray efter "diff" DESC og dernæst "pos"
>>> DESC, men hvordan? Jeg har prøvet alt muligt, læst alt muligt og nu
>>> trænger jeg til eksperters hjælp
>>>
>>> mit array:
>>> $tempArrayMulti[] = array(
>>> "holdID" => $tempArray[$w]['holdID'], "pos" => $pos, "neg" =>
>>> $neg, "diff" => ($pos/$neg)
>>> );
>>
>> Umiddeltbart ville jeg nok gøre således (kan ikke afvise det kan gøre
>> MEGET nemmere).
>>
>> $tempArrayMulti = array();
>> // Tilføj data
>> $sortArray = array();
>> $resultArrayMulti = array();
>> foreach($tempArrayMulti as $key=>$a) {
>> $sortArray[$key] = $a['diff'].'_'.$a['pos'];
>> }
>> arsort($sortArray);
>> reset($sortArray);
>> foreach($sortArray as $key=>$whatever) {
>> $resultArrayMulti[] = $tmpArrayMulti[$key];
>> }
>> var_dump($resultArrayMulti);
>>
>>
>> Det burde virke... men det er dog lidt afhængig af hvad post og diff
>> indeholder? Kan du give nogle eksempler fra "reallife" - så er det måske
>> lidt nemmere... hvis det begge er integers ville jeg nok f.eks. lave
>> værdien af $sortArray om til en integer (diff.pos). :) Lad mig høre lidt
>> mere :)
>>
>> mvh
>> Johan
>
>



Johan Holst Nielsen (13-05-2005)
Kommentar
Fra : Johan Holst Nielsen


Dato : 13-05-05 11:17

Jens wrote:
> Den sorterer "diff" helt fint, men fejler på følgende;
>
> pos = 20 / neg = 10
> pos = 10 / neg = 5
>
> sorterer med pos = 10 / neg = 5 øverst :/

Ved ikke om det hjælper - men prøv...

arsort($sortArray,SORT_NUMERIC);

Men synes jeg gennemskuet en bug før - men så blev jeg afbrudt og glemte
alt om det :(

mvh
Johan

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste