代码之家  ›  专栏  ›  技术社区  ›  Déjà vu

多个数组的PHP uksort()

  •  1
  • Déjà vu  · 技术社区  · 14 年前

    我想要一个独一无二的 分类 多个关联数组的函数。

    各种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');
    

    不影响钥匙。

    那么如何使用相同的排序函数 任何 阵列, UKCORT() 在代码中的不同位置被调用?例如 $arr1 , $arr2 , ..., $arrn ?
    是否有必要使用另一个全局变量,该变量的数组名将分配给要排序的数组(在排序之前),并在排序函数中全局使用?

    一定还有别的,干净点的,对吧?

    2 回复  |  直到 14 年前
        1
  •  1
  •   codaddict    14 年前

    您可以使用一个常见的比较函数,如:

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

    阿尔索 uksort 按键对数组排序。这就是你要找的吗?

    如果要按值对数组进行排序以维护键,则可以使用值关联 uasort .

        2
  •  0
  •   ajuchacko91    6 年前

    可以通过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
        )