PHP 将数组中的 NULL 值向下移动,而不使用 uasort 对索引进行排序


PHP move NULL value down in a array without sorting index using uasort

>我创建了一个像 arry

<?php
    $arr['00']=NULL;
    $arr['30']=NULL;
    $arr['31']=0.013;
    $arr['33']=0.013;
    $arr['34']=0.013;
    $arr['351']=NULL;
    $arr['39']=0.013;
    $arr['421']=NULL;
    $arr['44']=0.009;
    $arr['44GG']=0.009;
    $arr['44IM']=0.009;
    $arr['44JE']=0.009;
    $arr['49']=0.013;
    $arr['52']=NULL;
    $arr['55']=NULL;
    $arr['61']=NULL;
    $arr['62']=NULL;
    $arr['63']=NULL;
    $arr['86']=NULL;
    $arr['90']=NULL;
    $arr['90CC']=NULL;
    $arr['94']=NULL;
    $arr['994']=NULL;
    $arr['95']=0.02;
//before move
foreach( $arr as $i => $a)
{
    echo $i.'-'.$a.'<br>';
}
echo '<br>';
uasort($arr, function($a, $b){
    if ($a == NULL) return 1;
    if ($b == NULL) return -1;
    return 0;
});
//after move
foreach( $arr as $i => $a)
{
    echo $i.'-'.$a.'<br>';
}

我想在不对索引进行排序的情况下向下移动 NULL 值并获得以下输出

31-0.013
33-0.013
34-0.013
39-0.013
44-0.009
44GG-0.009
44IM-0.009
44JE-0.009
49-0.013
95-0.02
00-
30-
351-
421-
52-
55-
61-
62-
63-
86-
90-
90CC-
94-
994-

但我正在得到

95-0.02
44-0.009
44JE-0.009
44IM-0.009
44GG-0.009
49-0.013
39-0.013
34-0.013
33-0.013
31-0.013
94-
90CC-
90-
86-
63-
62-
421-
55-
52-
30-
351-
994-
00-
61-

我可以使用循环和接收数组来做到这一点。 但我需要使用 UAsort。 请帮帮我提前谢谢。我是初学者。如果我问的是非常简单的问题,请原谅我

使用array_filter函数和数组联合运算符+的简短解决方案:

// $arr is your initial array
$null_items = array_filter($arr, "is_null");
$notnull_items = array_filter($arr);
$result = $notnull_items + $null_items;
print_r($result);

输出:

Array
(
    [31] => 0.013
    [33] => 0.013
    [34] => 0.013
    [39] => 0.013
    [44] => 0.009
    [44GG] => 0.009
    [44IM] => 0.009
    [44JE] => 0.009
    [49] => 0.013
    [95] => 0.02
    [00] => 
    [30] => 
    [351] => 
    [421] => 
    [52] => 
    [55] => 
    [61] => 
    [62] => 
    [63] => 
    [86] => 
    [90] => 
    [90CC] => 
    [94] => 
    [994] => 
)