Avatar billede agffan Nybegynder
10. juli 2007 - 12:25 Der er 13 kommentarer og
1 løsning

sortering af array med decimaltal

sortering af array med decimaltal

Jeg har lige stillet sprg. her http://www.eksperten.dk/spm/786912 men hvad gør man så lige vis sprg. ik' er stillet helt rigtig? For jeg fik et rigtigt svar på det jeg spurgte om.

Jeg prøver lige igen!


eks.

$brugeropl = $ipnr[]."-".$tekst[];

Her vil jeg gerne sorter $brugeropl så $ipnr er stigende og det er her filmen knækker for hvis jeg bruger natsort($brugeropl) så virker skidtet ik'...


/agffan
Avatar billede jakobdo Ekspert
10. juli 2007 - 13:15 #1
I det sammenhæng burde sort() være korrekt så. :o)
Avatar billede agffan Nybegynder
10. juli 2007 - 13:22 #2
nej... for så 192.100.x.x kommer før 192.20.x.x og det er ikke korrekt

/agffan
Avatar billede jakobdo Ekspert
10. juli 2007 - 13:37 #3
Du kan evt. overveje at lege med funktionerne: ip2long() og long2ip().
Test denne kode:

<?php
//http://www.eksperten.dk/spm/786985

$myIp = array('127.0.0.1','192.10.1.2','192.1.1.2','192.100.3.2','192.11.1.2','192.168.1.2','89.56.12.45','127.0.0.2','84.55.78.123','192.168.1.1');

echo '<pre>';
print_r($myIp);
echo '</pre>';

$temp = array();
foreach($myIp AS $ip)
{
    $temp[] = ip2long($ip);
}

sort($temp);

foreach($temp AS $ip)
{
    echo long2ip($ip) . '<br />';
}

?>
Avatar billede jakobdo Ekspert
10. juli 2007 - 13:53 #4
Og den var så ikke helt optimal.
Se her: http://www.codebreaker.dk/exp/786985exp.php
og koden her:

<?php
//http://www.eksperten.dk/spm/786985

$myIp = array('127.0.0.1','192.10.1.2','192.1.1.2','192.100.3.2','192.11.1.2','192.168.1.2','89.56.12.45','127.0.0.2','84.55.78.123','192.168.1.1');

echo '<pre>';
print_r($myIp);
echo '</pre>';

$temp = array();
foreach($myIp AS $ip)
{
    $temp[] = sprintf("%u",ip2long($ip));
}

sort($temp);

$myIp = array();
foreach($temp AS $ip)
{
    $myIp[] = long2ip($ip);
}

echo '<pre>';
print_r($myIp);
echo '</pre>';

?>
Avatar billede agffan Nybegynder
10. juli 2007 - 18:14 #6
Jeg vil gerne sorter på ipnr som decimaltal da jeg senere kommer til at bruge den samme funktion til

eks.
$spillelist[]=$rank[]."-".$bruger;

hvor den så skal sorter $spillelist efter $rank altså den samme funktion.

/agffan
Avatar billede agffan Nybegynder
10. juli 2007 - 18:15 #7
upps!!

eks.
$spillelist[]=$rank[]."-".$bruger[];
Avatar billede jakobdo Ekspert
10. juli 2007 - 18:34 #8
Du kunne jo godt lave 2 funktioner.
En til sortRank og en til sortIp
Avatar billede agffan Nybegynder
10. juli 2007 - 22:41 #9
ja det vil også være okay... men jeg ved ikke hvordan jeg skal lave sorteringen af rank... jeg havde regnet med at kunne bruge funktionen begge steder...

Hvordan laver jeg sortrank funktionen??

/agffan
Avatar billede jakobdo Ekspert
11. juli 2007 - 07:50 #10
Hvad kan rank indeholde?
Avatar billede agffan Nybegynder
11. juli 2007 - 11:16 #11
selve rank'en indeholder tal med decimal på 1-3 ciffer altså... x.x til x.xxx

/agffan
Avatar billede agffan Nybegynder
11. juli 2007 - 11:17 #12
flere brugere kan have samme rank men der er ikke to bruger med samme navn.

/agffan
Avatar billede jakobdo Ekspert
11. juli 2007 - 18:12 #13
Du kan bruge denne kode til at sortere IP-adresser:

function convertFromIp($ip)
{
    return sprintf('%u', ip2long($ip));
}

function convertToIp($long)
{
    return long2ip(-(4294967296-$long));
}

function sortIp($myArray)
{
    $temp = array_map("convertFromIp",$myArray);
    sort($temp);
    return array_map("convertToIp",$temp);
}

Det bruges sådan her:

$myIp = array('127.0.0.1','192.10.1.2','192.1.1.2','192.100.3.2','192.11.1.2','192.168.1.2','89.56.12.45','127.0.0.2','84.55.78.123','192.168.1.1');
sortIp($myIp);
Avatar billede agffan Nybegynder
08. august 2007 - 22:14 #14
ikke det jeg søgte...


lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester