【问题标题】:sorting 2d array with individual comparator using phps array_multisort使用 phps array_multisort 使用单独的比较器对二维数组进行排序
【发布时间】:2012-09-06 10:46:16
【问题描述】:

我有一个二维数组,其中包含一个“列”,整个数组将在该列上进行排序。据我了解here,使用array_multisort 非常简单。我的问题是,这个要排序的 列包含需要以不寻常的方式进行比较的值。所以我想到了这样的事情:

function main(){
    $toBeSorted = array(array(...), ..., array(...));
    $sortColumnIndex = n;
    $sort_column = array();

    //Code copied from provided link
    foreach ($toBeSorted as $row)
        $sort_column []= $row[$sortColumnIndex];

    array_multisort($this->comparator(),$sort_column, $toBeSorted);
}

function comparator(a,b){
    return 1;
}

如您所见,我想将比较器传递给该排序函数。我可能以非 php 的方式思考了很多。

【问题讨论】:

    标签: php sorting multidimensional-array comparator


    【解决方案1】:

    usort函数,通过回调进行排序。

    否则,您可以查看 array_walkarray_walk_recursive 函数,它们遍历数组并将函数应用于每个成员。

    【讨论】:

    • 是否有另一个函数类似于 usort 但返回元素位置的数组?就像蟒蛇numpy.argsort?因为否则我无法跟踪其他列来对二维数组进行排序?
    • 我认为它不存在。 This is the list PHP 中的所有数组排序函数。
    【解决方案2】:

    我通过将我的排序空间转换为一个来解决它,array_multisort 可以处理:

    ...
    
    $sortColumn = array();
    foreach($toBeSorted as $value){
         $sortColumn[] = $this->transform($value);
    }
    array_multisort($sortColumn, $toBeSorted);
    
    ...
    

    我的转换函数只是完成了我想象回调会做的所有事情。

    function transform($value){
        //i.e. return real part of complex number
        //or parse strings or any kind of strange datatypes
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2018-06-21
      相关资源
      最近更新 更多