PHP - 如何将数组的空值移动到其最后位置

时间:2012-02-22 13:08:01

标签: php arrays

如何将数组的空值移动到最后位置?

例如:

$givenArray = array( 
                    0=>'green', 
                    1=>'', 
                    2=>'red', 
                    3=>'', 
                    4=>'blue'
                  );

$requiredArray = array(
                       0=>'green',
                       1=>'red',
                       2=>'blue',
                       3=>'',
                       4=>'' 
                      );

前提是不应对非空值进行排序。它应该是原样,即只有空值应该移动到数组的末尾。

我完全需要我的例子。

6 个答案:

答案 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);

Codepad demo

答案 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)函数可以使用您自己的自定义回调进行排序。