1

我有一个二维数组,其中包含一个“列”,整个数组都将在该列上进行排序。正如我在这里了解到的,使用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 的方式思考了很多。

4

2 回答 2

0

有一个usort函数,它使用回调进行排序。

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

于 2012-09-06T11:02:51.237 回答
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
}
于 2012-09-07T07:20:32.603 回答