Organizational Research By

Surprising Reserch Topic

how do i sort a php array by an element nested inside using -'php,arrays,sorting,multidimensional-array,usort'


how do i sort a php array by an element nested inside  using -'php,arrays,sorting,multidimensional-array,usort'

I have an array like the following:


Array
(
    [0] => Array
        (
            'name' => "Friday"
            'weight' => 6
        )
    [1] => Array
        (
            'name' => "Monday"
            'weight' => 2
        )
)


I would like to grab the last values in that array (the 'weight'), and use that to sort the main array elements. So, in this array, I'd want to sort it so the 'Monday' element appears before the 'Friday' element.
    

asked Sep 8, 2015 by rajesh
0 votes
7 views



Related Hot Questions

3 Answers

0 votes
Can be done using an anonymous function. Also if your 'weight' is a string use one of the other returns (see the commented out lines): <?php $arr = array( 0 => array ( 'name' => 'Friday', 'weight' => 6, ), 1 => array ( 'name' => 'Monday', 'weight' => 2, ), ); // sort by 'weight' usort($arr, function($a, $b) { // anonymous function // compare numbers only return $a['weight'] - $b['weight']; // compare numbers or strings //return strcmp($a['weight'], $b['weight']); // compare numbers or strings non-case-sensitive //return strcmp(strtoupper($a['weight']), strtoupper($b['weight'])); }); var_export($arr); /* array ( 0 => array ( 'name' => 'Monday', 'weight' => 2, ), 1 => array ( 'name' => 'Friday', 'weight' => 6, ), ) */
answered Sep 8, 2015 by rajesh
0 votes
Agree with usort, I also sometimes use array_multisort (http://ca2.php.net/manual/en/function.usort.php) example 3, sorting database results. You could do something like: <?php $days = array( array('name' => 'Friday', 'weight' => 6), array('name' => 'Monday', 'weight' => 2), ); $weight = array(); foreach($days as $k => $d) { $weight[$k] = $d['weight']; } print_r($days); array_multisort($weight, SORT_ASC, $days); print_r($days); ?> Output: Array ( [0] => Array ( [name] => Friday [weight] => 6 ) [1] => Array ( [name] => Monday [weight] => 2 ) ) Array ( [0] => Array ( [name] => Monday [weight] => 2 ) [1] => Array ( [name] => Friday [weight] => 6 ) )
answered Sep 8, 2015 by rajesh
0 votes
Here's a cool function that might help: function subval_sort($a,$subkey,$sort) { foreach($a as $k=>$v) { $b[$k] = strtolower($v[$subkey]); } if($b) { $sort($b); foreach($b as $key=>$val) { $c[] = $a[$key]; } return $c; } } Send in the array as $a the key as $subkey and 'asort' or 'sort' for the $sort variable
answered Sep 8, 2015 by rajesh

...