webForumDet fria alternativet

Array-sortering

6 svar · 298 visningar · startad av Web-Tor

Web-TorMedlem sedan nov. 200013 890 inlägg
#1

I en array har jag värden som består av tre bokstäver och tre siffror (t.ex. ABC123).

Hur gör jag om jag vill sortera dessa i nummerordning? Bokstäverna spelar alltså ingen roll men de måste ända ”finnas kvar”. Jag kan inte använda <substr> för att plocka bort bokstäverna eftersom jag i ett senare skede behöver alla sex tecken.

Kan man använda PHP:s fina sort-funktion på något sätt kanske?

/Tor

------------------
-----------

stevenetMedlem sedan juni 20001 251 inlägg
#2

Varför inte kopiera arrayen och sedan rensa bort ABC?
$kopia=$array[0];

------------------
SteveNet - stevenet@webmarkit.net
Stjäl inte mer än vad du kan bära, staten hatar konkurrens.

Web-TorMedlem sedan nov. 200013 890 inlägg
#3

Det är just det som inte går. Jag vill ha array:en i den här ordningen:

CCC111
BBB222
AAA333

Bokstäverna måste vara med men skall inte vara med i själva sorteringen.

Okey?
/Tor

------------------
-----------

woodiMedlem sedan feb. 20001 270 inlägg
#4

Web-Tor
Jag har ingen lösning så här på rak arm, men jag börjar bli nyfiken på vad Du håller på med! :)

Ska se om jag kan klura ut någon lösning på detta!

------------------
woodi
Svenska FF1
www.johan-skog.nu

SweyMedlem sedan apr. 20003 971 inlägg
#5

Två alternativ.
1. Lägg värdet du vill sortera efter som nyckel.

$array[111] = "CCC111";
$array[222] = "BBB222";
$array[333] = "AAA333";

Använd alt. ksort för att sortera efter nyckeln och sedan foreach för att skriva ut den i rätt ordning.
http://se.php.net/manual/function.ksort.php

2. Skapa en ny multiarray och lägg värdet du vill sortera efter på en plats och det du vill skriva ut på den andra.

$array[] = array(111, "CCC111");
$array[] = array(222, "BBB222");
$array[] = array(333, "AAA333");

Nu blir 0 sorteringsvärdet och 1 namnet.

För att sortera de använder du usort.

function mysort($a, $b) {
return ($a[0] > $b[0]);
}
usort($array, mysort);
http://se.php.net/manual/function.usort.php

Anm. Du kan alltid byta ut AAA111 mot AAA och slå ihop dem när du skriver ut (i båda fallen).

------------------
- Swey
Skriv först, tänk sen!

[Redigerat av Swey den 07 nov 2000]

RobbanMedlem sedan dec. 19992 555 inlägg
#6

Man kan även använda befintlig array genom att använda usort på följande sätt (antar att arrayen heter $array):

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
function cmp ($a, $b) {
  return (substr($a,3) > substr($b,3)) ? 1 : -1;
}

usort ($array, cmp);
</font>

------------------
Robban < robban@lipogram.com >

Web-TorMedlem sedan nov. 200013 890 inlägg
#7

Nu när mitt problem är löst för den här gången passar jag på att tacka alla för hjälpen.

Robban - Du är min idol!

/Tor

------------------
-----------

132 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)