======[PHP] array_sort_by_subarray_item()======
Ein mehrdimensionales Array nach einem Feld in einem Subarray zu sortieren braucht immer etwas Hirnschmalz um den array_multisort() richtig anzuwenden. Darum habe ich hier das mal ein eine nette Funktion gepackt.
=====Neue Version=====
/**
* mpl by ERB software
* @author stefan.erb(at)erb-software.com
* @since PHP 5.2
* Sortiert einen 2-Dimensionalen Array nach einem Key in der 2ten Dimension
* @param $array Array der sortiert wird
* @param $key Key im Array der sortiert werden soll (key oder index)
* @param $direction Sortierrichtung. SORT_ASC oder SORT_DESC
* @param $sort_flags SORT_REGULAR, SORT_STRING, SORT_NUMERIC. Siehe sort_flags-Parameter von sort()
*/
function array_sort_by_subarray_item(&$array, $key, $direction = SORT_ASC, $sort_flags = SORT_REGULAR){
$sort = array();
foreach($array as $index => $item){
$sort[$index] = strtoupper($item[$key]);
}
return array_multisort($sort, $direction, $sort_flags, $array);
}
Code zum testen
//Testdaten
$array[] = array('Name' => 'Eintrag 1', 'sort' => 15);
$array[] = array('Name' => 'Eintrag 2', 'sort' => 2);
$array[] = array('Name' => 'Eintrag 3', 'sort' => 5);
$array[] = array('Name' => 'Eintrag 4', 'sort' => 4);
//sortieren nach dem key sort
array_sort_by_subarray_item($array, 'sort', SORT_ASC, SORT_NUMERIC);
//Ausgeben der Daten
var_dump($array);
//und absteigend
array_sort_by_subarray_item($array, 'sort',SORT_DESC, SORT_NUMERIC);
var_dump($array);
//Nach Index (in dem Fall: Index 1 = sort)
array_sort_by_subarray_item($array, 1, SORT_DESC, SORT_NUMERIC);
var_dump($array);
//Nach Name
array_sort_by_subarray_item($array, 'Name');
var_dump($array);
----
{{tag>PHP Function Array}}