User Tools

Site Tools


php:functions:array:arraysortbysubarrayitem

[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

array_sort_by_subarray_item.php
/**
 * 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);

php/functions/array/arraysortbysubarrayitem.txt · Last modified: 11.02.2014 15:17:52 (external edit)