PHP按值使用uasort对NULL进行多维数组排序

时间:2016-07-01 06:40:11

标签: php arrays multidimensional-array usort

我创建了像

这样的arry
$arr[0]['ref']=5;
$arr[0]['name']='name0';

$arr[1]['ref']=6;
$arr[1]['name']='name1';

$arr[2]['ref']=4;
$arr[2]['name']='name2';

$arr[3]['ref']='';
$arr[3]['name']='name3';

$arr[4]['ref']='9';
$arr[4]['name']='name4';

$arr[5]['ref']=''
$arr[5]['name']='name5'

我想像使用ref值

那样对这个数组进行排序
$arr[2]['ref']=4;
$arr[2]['name']='name2';

$arr[0]['ref']=5;
$arr[0]['name']='name0';

$arr[1]['ref']=6;
$arr[1]['name']='name1';

$arr[4]['ref']='9';
$arr[4]['name']='name4';

$arr[3]['ref']='';
$arr[3]['name']='name3';

$arr[5]['ref']=''
$arr[5]['name']='name5'

我试过

uasort($arr, function($a, $b){
    return $a['ref'] - $b['ref'];
});

但是''价值即将到来。我怎样才能推动''下。

提前致谢。我是初学者。如果我问非常简单的问题,请原谅我

3 个答案:

答案 0 :(得分:3)

这将完成这项工作:

uasort($arr, function($a, $b){
    if ($a['ref'] == "") return 1;
    if ($b['ref'] == "") return -1;
    return $a['ref'] - $b['ref'];
});

答案 1 :(得分:0)

你可以尝试

uasort($arr, function($a, $b){
    return -($a['ref'] - $b['ref']);
});

答案 2 :(得分:0)

您可以使用以下方法将空值添加到数组末尾:

uasort($arr, function($a, $b){
   return $a['ref'] - $b['ref'];
});

//strip empties and move to end
foreach ($arr as $key => $value)
{ 
    if ($value['ref'] == "")
    { 
        unset($arr[$key]);
        $arr[] = $value;
    }
}

// rebuild array index
$arr = array_values($arr);

输出:

Array
(
    [0] => Array
        (
            [ref] => 4
            [name] => name2
        )

    [1] => Array
        (
            [ref] => 5
            [name] => name0
        )

    [2] => Array
        (
            [ref] => 6
            [name] => name1
        )

    [3] => Array
        (
            [ref] => 9
            [name] => name4
        )

    [4] => Array
        (
            [ref] => 
            [name] => name5
        )

    [5] => Array
        (
            [ref] => 
            [name] => name3
        )

)