Sort PHP multi-dimensional array based on value in inner array? [duplicate]
Thinking,more useful and practical http://php.net/manual/en/function.sort.php
function array_sort($array, $on, $order=SORT_ASC){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
How to use
$list = array(
array( 'type' => 'suite', 'name'=>'A-Name'),
array( 'type' => 'suite', 'name'=>'C-Name'),
array( 'type' => 'suite', 'name'=>'B-Name')
);
$list = array_sort($list, 'name', SORT_ASC);
array(3) { [0]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "A-Name" } [2]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "B-Name" } [1]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "C-Name" } }
Try this usort function:
function cmp($a, $b){
if ($a == $b)
return 0;
return ($a['name'] < $b['name']) ? -1 : 1;
}
$my_array = array(
0 => array
(
'type' => 'suite'
,'name' => 'A-Name'
)
,1 => array
(
'type' => 'suite'
,'name' => 'C-Name'
)
,2 => array
(
'type' => 'suite'
,'name' => 'B-Name'
)
);
usort($my_array, "cmp");
If you using it in a class, the second parameter changes to an array like this:
usort($my_array, array($this,'cmp'));
array_multisort() - Sort multiple or multi-dimensional arrays