Ik heb de volgende array momenteel


<?php

$data[] = array("id"=> "1","name"=>"Bob");
$data[] = array("id"=> "2","name"=>"Andre");
$data[] = array("id"=> "3","name"=>"Nelleke");
$data[] = array("id"=> "4","name"=>"Xander");
$data[] = array("id"=> "5","name"=>"Frits");

?>


Hoe kan ik deze in PHP sorteren op naam? Normaliter zou ik deze info allemaal sorteren in de query maar momenteel wordt er niet gebruik gemaakt van een join waardoor ik er niet omheen kan om het zo te doen.

Wie kan me hier bij helpen?
Maak gebruik van usort en schrijf een eenvoudige (callback)functie.

EDIT: volgens mij kun je het tweede voorbeeld nagenoeg letterlijk overnemen.
Als je met multisort array_multisort() bedoelt:


<?php
$data[] = array('id' => '1', 'name' => 'Bob');
$data[] = array('id' => '2', 'name' => 'Andre');
$data[] = array('id' => '3', 'name' => 'Nelleke');
$data[] = array('id' => '4', 'name' => 'Xander');
$data[] = array('id' => '5', 'name' => 'Frits');

foreach ($data as $key => $row) {
    $ids[$key]   = $row['id'];
    $names[$key] = $row['name'];
}

array_multisort($names, SORT_ASC, SORT_LOCALE_STRING, $ids, SORT_ASC, SORT_NUMERIC, $data);
?>
Hasta la pasta ..

<?php

function compareOnName($a, $b)
{
return strcmp($a['name'], $b['name']);
}

usort($data, "compareOnName");

?>
Of, nog korter, gebruik een anonieme functie:

<?php
usort($data, function($a, $b) {
    return strcmp($a['name'], $b['name']);
});
?>


Whee~
>> Of, nog korter, gebruik een anonieme functie

Een closure :-)
Of efficiƫnter:

<?php
$data[] = array('id'=> 2, 'name'=>'Andre');
$data[] = array('id'=> 1, 'name'=>'Bob');
$data[] = array('id'=> 5, 'name'=>'Frits');
$data[] = array('id'=> 3, 'name'=>'Nelleke');
$data[] = array('id'=> 4, 'name'=>'Xander');
?>

Klaar. \o/

Reageren