1

In php I have a numerical array of associative arrays:

mainArray: 
[
  array1:['title':'Record a','order':'2'],
  array2:['title':'Record b','order':'4'],
  array3:['title':'Record c','order':'1'],
  array4:['title':'Record d','order':'3']
]

What is the simplest way to sort mainArray by the 'order' value of each associative array?

Thanks

Travis
  • 2,011
  • 4
  • 22
  • 31
  • [uasort()](http://php.net/manual/en/function.uasort.php) is helpful for array() If multiple array then use [array_multisort()](http://php.net/manual/en/function.array-multisort.php) – user1972007 Nov 03 '12 at 12:49

3 Answers3

2

You can use usort function. Since PHP 5.4 you can use closure function:

usort($mainArray, function ($a, $b) {
  $a_val = (int) $a['order'];
  $b_val = (int) $b['order'];

  if($a_val > $b_val) return 1;
  if($a_val < $b_val) return -1;
  return 0;
});

Or version for PHP < 5.4:

usort($mainArray, 'myCompare');

function myCompare($a, $b) {
  $a_val = (int) $a['order'];
  $b_val = (int) $b['order'];

  if($a_val > $b_val) return 1;
  if($a_val < $b_val) return -1;
  return 0;
}
Athlan
  • 6,389
  • 4
  • 38
  • 56
0

The simplest version, using comparison function and usort:

usort($mainArray, function($a, $b) {
  return $a['order'] - $b['order'];
});
Vladimir
  • 2,461
  • 2
  • 14
  • 18
-1

I found this in the php documentation comments for asort() See also the sort() page, in the comments there are a few good candidates.

function named_records_sort($named_recs, $order_by, $rev=false, $flags=0)
{// Create 1-dimensional named array with just
 // sortfield (in stead of record) values
    $named_hash = array();
     foreach($named_recs as $key=>$fields)
             $named_hash["$key"] = $fields[$order_by];

 // Order 1-dimensional array,
 // maintaining key-value relations  
    if($reverse) arsort($named_hash,$flags=0) ;
    else asort($named_hash, $flags=0);

 // Create copy of named records array
 // in order of sortarray 
    $sorted_records = array();
    foreach($named_hash as $key=>$val)
           $sorted_records["$key"]= $named_recs[$key];

return $sorted_records;} // named_recs_sort()

function show_sorted_records($named_recs, $order_by, $rev=false, $flags=0)
{$sorted_records=named_records_sort($named_recs, $order_by, $rev, $flags);
foreach($sorted_records as $name=>$fields)
  {echo "<b>$name</b>   ";
   foreach($fields as $field=>$val)
          echo "$field = $val "; echo "<br>";}
} // show_sorted_records()

$girl_friends=array();
$girl_friends["Anna"]=
array("born"=>'1989-08-22',"cupsize"=>'B-',"IQ"=>105, "daddy"=>'rich');
$girl_friends["Zoe"]
=array("born"=>'1978-03-11',"cupsize"=>'C#',"IQ"=>130, "daddy"=>'poor');
$girl_friends["Lilly"]
=array("born"=>'1985-06-16',"cupsize"=>'DD',"IQ"=>90, "daddy"=>'nasty');

$order_by="cupsize"; echo "And the winners are: <br>";
show_sorted_records($girl_friends, $order_by, true);
pixeline
  • 17,669
  • 12
  • 84
  • 109