php使用自定义键和本机调用来使用多维数组

时间:2014-09-04 19:25:14

标签: php

我需要使用本机调用通过自定义键对关联数组进行排序。

实施例

array(
    array('name' => 'abc', 'priority' => 5),
    array('name' => 'def', 'priority' => 7),
    array('name' => 'ghi', 'priority' => 2)
);

需要使用priority键对内部数组进行排序。这样做是这样的:

usort($myArray, function($a, $b) {
    return $a['priority'] - $b['priority'];
});

但是,我想创建一个如下所示的函数:

function sort_array_by_inner_key($array, $key) {
    usort($array, function($a, $b){
        return $a[$key] - $b[$key];
    });
    return $array;
}

显然,$key内的function($a, $b)变量将为空,因为我们尚未对其进行分配。如何在比较函数中传递$key?我显然可以使用自己的排序功能来完成此任务,但我想使用本机排序功能。

2 个答案:

答案 0 :(得分:2)

您需要在传递给use的内部函数上使用usort关键字。

来自文档(http://php.net/manual/en/functions.anonymous.php):

  

闭包还可以从父作用域继承变量。必须将任何此类变量传递给使用语言构造。

所以,试试这个:

function sort_array_by_inner_key($array, $key) {
    usort($array, function($a, $b) use($key){
        return $a[$key] - $b[$key];
    });
    return $array;
}

这将按预期工作。

如果你愿意,你甚至可以这样做:

function sort_array_by_inner_key(&$array, $key) {
    usort($array, function($a, $b) use($key){
        return $a[$key] - $b[$key];
    });
}

现在sort_array_by_inner_key会对其进行排序,而不是将其返回。

答案 1 :(得分:0)

    suggesting little enhancement for dynamic key and order based sorting if anyone is looking for the same


public static function sort2DArrayByKey($array, $key , $order = 'ASC') {
        usort($array, function($a, $b) use($key,$order){
            if($order == "DESC") {
                return $b[$key] - $a[$key];
            }
            else{
                return $a[$key] - $b[$key];
            }
        });
        return $array;
    }