PHP 在数组中向下移动 NULL 值而不使用 uasort 对索引进行排序
PHP move NULL value down in a array without sorting index using uasort
我创建了一个像
这样的库
<?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] =>
)
我创建了一个像
这样的库<?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] =>
)