如何将数组的空值移动到最后位置?
例如:
$givenArray = array(
0=>'green',
1=>'',
2=>'red',
3=>'',
4=>'blue'
);
$requiredArray = array(
0=>'green',
1=>'red',
2=>'blue',
3=>'',
4=>''
);
前提是不应对非空值进行排序。它应该是原样,即只有空值应该移动到数组的末尾。
我完全需要我的例子。
答案 0 :(得分:6)
您首先要查找的所有值都不是空字符串(""
),然后所有值都是空字符串:
$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) ""
}
它的好处是它保留了key =>价值关联。如果您需要重新编号,只需应用array_values
功能:
$requiredArray = array_values($requiredArray);
这会将其转换为您需要的布局(Demo):
array(5) {
[0]=> string(5) "green"
[1]=> string(3) "red"
[2]=> string(4) "blue"
[3]=> string(0) ""
[4]=> string(0) ""
}
答案 1 :(得分:5)
此线程中已经有更好/更优雅的答案,但这也有效:
//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);
答案 2 :(得分:4)
尝试使用usort
。
function empty_sort ($a, $b) {
if ($a == '' && $b != '') return 1;
if ($b == '' && $a != '') return -1;
return 0;
}
usort($array, 'empty_sort');
给出了(Demo):
Array
(
[0] => blue
[1] => green
[2] => red
[3] =>
[4] =>
)
答案 3 :(得分:2)
这应该有效:
function sortempty( $a, $b ) {
return empty( $a );
}
usort( $array, 'sortempty' );
输出(Demo):
Array
(
[0] => blue
[1] => green
[2] => red
[3] =>
[4] =>
)
usort()
允许您使用用户定义的函数对数组进行排序。如果$a
为空,我会返回。如果它为空,则返回1,使值$a
在数组中右移(或向下)。
答案 4 :(得分:1)
$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);
答案 5 :(得分:0)
有usort($array, $callback)函数可以使用您自己的自定义回调进行排序。