使用phps array_multisort使用单个比较器对2d数组进行排序

时间:2012-09-06 10:46:16

标签: php sorting multidimensional-array comparator

我有一个包含“列”的二维数组,整个数组将在该列上进行排序。在我学习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;
}

如您所见,我想将比较器传递给该sort-function。我可能会以非PHP方式思考。

2 个答案:

答案 0 :(得分:0)

usort函数,可以使用回调进行排序。

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

答案 1 :(得分:0)

我通过将我的排序空间转换为一个来解决它,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
}