Sortere json med php

kongen

kongemedlem
Jeg har 2 .txt filer. Den første, kvinner.txt, inneholder:

HTML:
{
   "navn":"Kari",
   "alder":"23"
}
{
   "navn":"Emma",
   "alder":"21"
}

Den andre, menn.txt, inneholder:

HTML:
{
   "navn":"Ola Nordmann",
   "alder":"22"
}
{
   "navn":"Olle Svenskmann",
   "alder":"24"
}

I en .php-fil så vil jeg hente alle personene fra disse to .txt-filene for så å sortere navnene etter alder, den gamleste øverst. Hvordan skal php-koden være?

PHP:
$kvinner = json_decode(file_get_contents('kvinner.txt'));
$menn = json_decode(file_get_contents('menn.txt'));

---> magisk php kode...

...som gir dette resultatet:

Olle Svenskmann, 24
Kari, 23
Ola Nordmann, 22
Emma, 21
 

adeneo

Medlem
Først må du begynne med gyldig JSON, du kan validere på JSONLint - The JSON Validator.

PHP:
[
    {
        "navn": "Kari",
        "alder": "23"
    },
    {
        "navn": "Emma",
        "alder": "21"
    }
]

Så er det bare å hente de, slå sammen, og sortere

PHP:
$kvinner = json_decode(file_get_contents('kvinner.txt'), true); 
$menn    = json_decode(file_get_contents('menn.txt'), true);

$begge = array_merge($kvinner, $menn);


function compare($a, $b) {
    return $a['alder'] == $b['alder'] ? 0 : ($a['alder'] > $b['alder'] ? -1 : 1);
}

usort($begge, "compare");
 

pmbakken

New Member
En imponerende one-liner fra adeneo! :)
Selv måtte jeg nok brutt opp den der i noen flere linjer for å skjønne hva jeg holdt på med ...

Ellers nærmer du deg nå kanten av når det er naturlig å bruke filsystemet til lagring av datastrukturer. Dersom du trenger spørringer, sorteringer og henting av utvalg fra datamengder, så er det jo dette man bruker databaser til. Der ville jo dette være så enkelt som "select kjoenn, navn, alder from person order by alder asc|desc"

Selv er jeg veldig glad i filer til lagring av ting og tang. Særlig da til logging. Og konfigurasjon. Filer egner seg vel best der data stort sett er kronologisk eller man skal traversere gjennom data og behandle alle objektene. Trenger du mere så må kanskje snart bite i gresset og installere en database ... men filer er lettvint og fint ... akk valgets kvaler!
 
Topp