2010-09-03 154 views
3

我已经尝试调整此代码以用于对命名键/字段上的多维数组进行排序。该字段是我需要从最小到最大排序的整数。PHP按字段名称对多维数组进行排序

function myCmp($a, $b) 
{ 
    return strcmp($a["days"], $b["days"]); 
} 

uasort($myArray, "myCmp"); 

按照我的需要排序数组,但顺序错误。目前它从大到小排序,而不是使用自然顺序。我需要按照自然顺序排列最小到最大(例如,2在5,12和24之前)。

回答

1

你可以只扭转的strcmp的参数:

function myCmp($a, $b) 
{ 
    return strcmp($b["days"], $a["days"]); 
} 

uasort($myArray, "myCmp"); 
1

既然你想在自然顺序进行排序,你应该使用strcmp,你可以这样做:

function myCmp($a, $b) 
{ 
    if ($a['days'] == $b['days']) return 0; 
    return ($b['days'] > $a['days']) ? -1 : 1; 
} 

这里一个working example

+0

如果有人还在观望,这不返回自然顺序。对于数字27,2,5,它返回5,27,2 – YsoL8 2010-09-13 09:48:04

7

strnatcmp()是你的朋友

例如, (使用PHP 5.3封/ anonymous function):

<?php 
$myArray = array('foo'=>array('days'=>2), 'bar'=>array('days'=>22), 'ham'=>array('days'=>5), 'egg'=>array('days'=>12)); 
uasort($myArray, function($a, $b) { return strnatcmp($a["days"], $b["days"]); }); 

foreach($myArray as $k=>$v) { 
    echo $k, '=>', $v['days'], "\n"; 
} 

打印

foo=>2 
ham=>5 
egg=>12 
bar=>22