Sortera en array efter nyckel eller värde

» »

Publicerad i PHP den

Här går vi igenom hur du sorterar en array i PHP efter antingen nyckel (key) eller värde (value), så att du kan bearbeta värdena i korrekt ordning.

Ett smidigt sätt att lagra data i PHP är att lägga dem i en så kallad array, vilket är ett slags träd med alla olika värden du ska bearbeta i ditt PHP-skript.

En array kan exempelvis se ut så här:

$cities = array(
    'Stockholm',
    'Sundsvall',
    'Mora',
    'Helsingborg',
    'Lund',
);

I vår array har vi alltså en lista på svenska städer, som inte är sorterad på något vis. Detta är en "enkel" array, eftersom den bara är en lista med värden, och inte har både definierade nycklar och värden.

En array med både nycklar och värden kan istället se ut så här:

$cities = array(
    'Stockholm'=>974073,
    'Sundsvall'=>51354,
    'Mora'=>10896,
    'Helsingborg'=>108334,
    'Lund'=>91940,
);

I den här arrayen ser vi både staden, vilket är nyckeln, samt befolkningsmängden, vilket är värdet.

Sortera en array i PHP

Det finns sex enkla funktioner för att sortera en array i PHP, som alla används i olika scenarion;

  1. sort() sorterar en enkel array i stigande bokstavsordning
  2. rsort() sorterar istället i fallande bokstavsordning
  3. asort() sorterar i stigande bokstavsordning och behåller nyckeln
  4. arsort() sorterar i fallande bokstavsordning och behåller nyckeln
  5. ksort() sorterar nyckeln i stigande bokstavsordning
  6. krsort() sorterar nyckeln i fallande bokstavsordning

Här nedanför går vi igenom varje funktion, hur du använder den och hur resultatet ser ut efter att den har applicerats på vår array.

1. Stigande bokstavsordning på värdet: sort()

Om vi vill sortera vår enkla array i bokstavsordning på värdena och inte behöver ta hänsyn till nycklarna i arrayen använder vi funktionen sort() på följande sätt:

sort($cities);

Resultatet efter att sorteringen har applicerats blir:

$cities = array(
    'Helsingborg',
    'Lund',
    'Mora',
    'Stockholm',
    'Sundsvall',
);

Nu har vår enkla array sorterats efter respektive stads begynnelsebokstav i stigande ordning.

2. Fallande bokstavsordning på värdet: rsort()

Om vi istället vill sortera vår enkla array i omvänd bokstavsordning på värdena, alltså fallande, och fortfarande inte tar hänsyn till nycklarna använder vi funktionen rsort():

rsort($cities);

Resultatet efter att den omvända sorteringen har applicerats blir:

$cities = array(
    'Sundsvall',
    'Stockholm',
    'Mora',
    'Lund',
    'Helsingborg',
);

Nu har vår enkla array sorterats efter respektive stads namn i fallande ordning.

3. Stigande bokstavsordning på värdet med nyckel: asort()

Så till något lite mer intressant; hur vi sorterar vår array utifrån värdena i arrayen — i vårt fall befolkningsmängden — och samtidigt behåller värdet på nycklarna där vi har namnen på städerna.

Funktionen vi använder nu är asort() på följande sätt:

asort($cities);

Resultatet blir nu att städerna i vår array sorteras efter befolkningsmängden som varje nyckel (stad) har som värde (befolkningsmängd):

$cities = array(
    'Stockholm'=>974073,
    'Helsingborg'=>108334,
    'Lund'=>91940,
    'Sundsvall'=>51354,
    'Mora'=>10896,
);

Samma funktion kan givetvis användas för att sortera vilka värden som helst, så länge din array har samma struktur (nyckel och värde) som vår med städer och befolkningsmängd.

4. Fallande bokstavsordning på värdet med nyckel: arsort()

Som du säkert har förstått ska vi nu vända sorteringen där vi behåller vår nyckel (stad) och sorterar i fallande ordning på dess värde (befolkningsmängd).

Funktionen vi använder nu är asort():

arsort($cities);

Resultatet blir följande:

$cities = array(
    'Mora'=>10896,
    'Sundsvall'=>51354,
    'Lund'=>91940,
    'Helsingborg'=>108334,
    'Stockholm'=>974073,
);

Nu har vi alltså fått Mora högst upp, eftersom staden har lägst befolkningsmängd i vår array. Stockholm, som har flest, har hamnat längst ner.

5. Stigande bokstavsordning på nyckeln: ksort()

Nu har vi slutligen hamnat vid de två sista sorteringsfunktionerna, där vi går från att sortera efter värde — vilket är det vi gjort hittills — till att sortera efter nyckeln.

I vårt fall med städerna innebär det helt enkelt att vi får vår array sorterad i bokstavsordning, precis på samma sätt som i det första exemplet, men nu har vi vår befolkningsmängd som värde.

Funktionen vi nu använder heter ksort() och den används likadant som de tidigare:

ksort($cities);

Resultatet efter att ha använt denna sortering är därmed:

$cities = array(
    'Helsingborg'=>108334,
    'Lund'=>91940,
    'Mora'=>10896,
    'Stockholm'=>974073,
    'Sundsvall'=>51354,
);

Om du bara vill sortera efter nycklarnas egna namn, men behålla respektive värde, är det alltså ksort() du använder.

6. Fallande bokstavsordning på nyckeln: krsort()

Sist men inte minst, funktionen för att sortera en array efter nycklarnas namn i fallande ordning.

Nu använder vi funktionen krsort(), vilket står för Key Reverse Sort. Funktionen används på samma sätt som tidigare:

krsort($cities);

Resultatet är — som förväntat — följande:

$cities = array(
    'Sundsvall'=>51354,
    'Stockholm'=>974073,
    'Mora'=>10896,
    'Lund'=>91940,
    'Helsingborg'=>108334,
);

Nu har vi alltså kvar befolkningsmängden som värde för respektive nyckel, men vi har sorterat hela vår array efter nyckelns namn i fallande ordning; Sundsvall först och Helsingborg sist.

Använd till vad som helst

En array är ett mycket smidigt sätt att bearbeta stora mängder data — och dessutom vilka typer av data som helst — med hjälp av programmeringsspråket PHP.

Det kan röra sig om listor på filer, bilder eller, som i vårt fall, listor på städer. Huvudsaken är att du förstår att du har möjlighet att genomföra en sortering och sedan bearbeta allting med exempelvis en foreach()-loop.

I stort sett vad som helst är möjligt med PHP, så det är bara att nöta språket för att lära sig mer och komma runt de problem som kan tänkas dyka upp.


Detaljer

  • Titel: Sortera en array efter nyckel eller värde
  • Publicerad:
  • Skribent:
  • Kategorier: PHP

Populära inlägg

Här hittar du de mest besökta artiklarna den senaste tiden.

Populära tjänster

Webbhotell

Inleed Special

29 kr / mån

  • Utrymme: 10 GB
  • Trafikmängd: 250 GB
  • Gratis SSL-certifikat: Ja
  • Startavgift: 0 kr

Virtuell server

Inleed VPS #1

199 kr / mån

  • Antal CPU-kärnor: 1 st
  • Minne: 8 GB
  • Utrymme: 100 GB
  • Trafikmängd: 3000 GB

Dedikerad server

Inleed Server #1

499 kr / mån

  • Antal CPU-kärnor: 2 st
  • Minne: 8 GB
  • Utrymme: 500 GB
  • Trafikmängd: 3000 GB

Backuphantering

Inleed Backup 100

19 kr / mån

  • Utrymme: 100 GB
  • Trafikmängd: 3000 GB
  • Startavgift: 0 kr

Domänhantering

Inleed DNS

0 kr / mån

  • Antal domännamn: Obegränsat

Co-location

Inleed Rackserver 1U

299 kr / mån

  • Trafikmängd: 3000 GB
  • Anslutning: 1000 Mbit/s
  • Reservström: UPS + Diesel
  • Startavgift: 0 kr

VPN-tjänster

NordVPN

33 kr / mån

  • Anslutningar: 6 st
Bäst webbhotell just nu
VPN-tjänster Pris Anslutningar
OVPN 49 kr 4 st
Inleed VPN 29 kr 2 st
NordVPN 33 kr 6 st
Ivacy VPN 22 kr 10 st

Vill du ha hjälp?

Ibland kan det vara svårt att göra ett val. Har du fortfarande inte hittat den information du söker, eller undrar du över något som saknas på sidan? Hör av dig till oss så hjälper vi dig!

Kontakta oss