如何将数组的空值移动到最后一个位置?
例如:
$givenArray = array(
0=>'green',
1=>'',
2=>'red',
3=>'',
4=>'blue'
);
$requiredArray = array(
0=>'green',
1=>'red',
2=>'blue',
3=>'',
4=>''
);
前提是不应对非空值进行排序。它应该是原样,即只有空值应该移动到数组的末尾。
我需要的正是我的例子。
您首先要查找所有不是空字符串(""
)的值,然后查找所有是空字符串的值:
$requiredArray = array_diff($givenArray, array(''))
+ array_intersect($givenArray, array(''));
这将给你:
array(5) {
[0]=> string(5) "green"
[2]=> string(3) "red"
[4]=> string(4) "blue"
[1]=> string(0) ""
[3]=> string(0) ""
}
这样做的好处是保留了键=>值关联。如果您需要重新编号钥匙,只需应用array_values
功能:
$requiredArray = array_values($requiredArray);
这将把它变成你需要的布局(演示):
array(5) {
[0]=> string(5) "green"
[1]=> string(3) "red"
[2]=> string(4) "blue"
[3]=> string(0) ""
[4]=> string(0) ""
}
在这个线程中已经有了更好/更优雅的答案,但这也很有效:
//strip empties and move to end
foreach ($givenArray as $key => $value)
{
if ($value === "")
{
unset($givenArray[$key]);
$givenArray[] = $value;
}
}
// rebuild array index
$givenArray = array_values($givenArray);
Codepad演示
尝试使用usort
。
function empty_sort ($a, $b) {
if ($a == '' && $b != '') return 1;
if ($b == '' && $a != '') return -1;
return 0;
}
usort($array, 'empty_sort');
哪个给出(演示):
Array
(
[0] => blue
[1] => green
[2] => red
[3] =>
[4] =>
)
这应该有效:
function sortempty( $a, $b ) {
return empty( $a );
}
usort( $array, 'sortempty' );
输出(演示):
Array
(
[0] => blue
[1] => green
[2] => red
[3] =>
[4] =>
)
usort()
允许您使用用户定义的函数对数组进行排序。如果$a
是否为空,则返回。如果为空,则返回1,使值$a
在数组中向右(或向下)移动。
$givenArray = array(
0=>'green',
1=>'',
2=>'red',
3=>'',
4=>'blue'
);
foreach($givenArray as $value){
if(empty($value)){
$newarray[] = $value;
}else{
$filledarray[] = $value;
}
}
$requiredArray = array_merge($filledarray,$newarray);
有一个usort($array,$callback)函数,它将使用您自己的自定义回调进行排序。