2010-06-04 57 views
0

在PHP我有关联数组的数值数组:如何在PHP中对数组进行排序?

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'] 
] 

这是由每个关联数组的“订单”值进行排序mainArray最简单的方法是什么?

感谢

+0

[uasort()](http://php.net/manual/en/function.uasort .php)对array()有帮助如果多个数组然后使用[array_multisort()](http://php.net/manual/en/function.array-multisort.php) – user1972007 2012-11-03 12:49:44

回答

0

我发现这个在php documentation comments for asort()又见sort()页面的评论也有几个不错的人选。

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); 
2

您可以使用usort函数。自PHP 5.4,你可以使用闭合功能:

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; 
}); 

或版本的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; 
}