几个数组的PHP uksort()

时间:2010-10-08 06:04:42

标签: php arrays sorting

我想为几个关联数组提供一个独特的 sort 函数。

各种PHP排序函数中最好的候选者是uksort(),(usort()是理想的,但它会将数组键更改为数字索引(!))。

例如(使用更简单的数组)

  function sorting_by_length_desc ($a, $b) 
  {
    return strlen($GLOBALS['arr'][$b]) - strlen($GLOBALS['arr'][$a]);
  }

  $arr = ('chandler' => 'bing', 'monica' => 'lewinsky');

  uksort($arr, 'sorting_by_length_desc');

将使$arr成为

  ('monica' => 'lewinsky', 'chandler' => 'bing');

不影响按键。

那么如何对任何数组使用相同的排序函数,在代码中的不同位置调用uksort()?例如$arr1$arr2,...,$arrn
是否有必要使用另一个具有数组名称的全局var来分配给要排序的数组(在排序之前),并在sort函数中全局使用?

必须有别的东西,干净,对吧?

2 个答案:

答案 0 :(得分:1)

您可以使用以下常用比较功能:

function sorting_by_length_desc ($a, $b) {
        return strlen($b) - strlen($a);
}

同样uksort对键上的数组进行排序。那是你在找什么?

如果要对数值进行排序,保持键值关联,可以使用uasort

答案 1 :(得分:0)

您可以通过uksort()函数实现此目标

  $arr = array('chandler' => 'bing', 'monica' => 'lewinsky', 'name' => 'smallest one');

  uksort($arr, function($a, $b) {
    return strlen($a) - strlen($b);
  });

  $result = $arr;

结果(按数组键的最小字符串长度排序):

Array
    (
        [name] => smallest one
        [monica] => lewinsky
        [chandler] => bing
    )