我有一个包含“列”的二维数组,整个数组将在该列上进行排序。在我学习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方式思考。
答案 0 :(得分:0)
有usort函数,可以使用回调进行排序。
否则,您可以查看array_walk和array_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
}