PHP按字段名称对多维数组进行排序

时间:2010-09-03 14:10:03

标签: php arrays sorting multidimensional-array

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

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

uasort($myArray, "myCmp");

这会根据我的需要对数组进行排序,但顺序错误。目前它从最小到最小,不使用自然顺序。我需要按自然顺序排序从最小到最大(例如2在5,12和24之前)。

3 个答案:

答案 0 :(得分:7)

strnatcmp()是你的朋友

e.g。 (使用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

答案 1 :(得分:1)

你可以反转strcmp的参数:

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

uasort($myArray, "myCmp");

答案 2 :(得分:1)

由于您希望按自然顺序排序,您应该使用strcmp,您可以这样做:

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

这是working example