PHP从数组的两侧删除空项

时间:2012-04-19 15:10:48

标签: php arrays list

我有以下数组:

Array 
(
[0] => 
[1] => 
[2] => apple
[3] => 
[4] => orange
[5] => strawberry
[6] => 
)

如何从开头和结尾删除空白项目,而不是从内部删除?最终的数组应如下所示:

Array 
(
[0] => apple
[1] => 
[2] => orange
[3] => strawberry
)

7 个答案:

答案 0 :(得分:10)

这是一种方便的方式:

while (reset($array) == '') array_shift($array);
while (end($array) == '') array_pop($array);

See it in action

强制性评论:我正在使用与空字符串的松散比较,因为它看起来像你想要的例子。如果您想更准确地了解要删除的元素,请相应地自定义条件。

更新:奖励标志性的PHP丑陋代码可能更快

我想到,如果在数组的开头和结尾有很多空元素,上面的方法可能不是最快的,因为它逐个删除它们,在每一步中重新索引数组等等。所以这里是适用于任何阵列的解决方案,只需一步即可完成修剪。警告:丑陋

$firstNonEmpty = 0;
$i = 0;
foreach ($array as $val) {
    if ($val != '') {
        $firstNonEmpty = $i;
        break;
    }
    ++$i;
}

$lastNonEmpty = $count = count($array);
end($array);
for ($i = $count; $i > 0; --$i) {
    if (current($array) != '') {
        $lastNonEmpty = $i;
        break;
    }
    prev($array);
}

$array = array_slice($array, $firstNonEmpty, $lastNonEmpty - $firstNonEmpty);

See it in action

答案 1 :(得分:1)

你去了:

$Array = array('', Allo, '');

if(isset($Array[0]) && empty($Array[0])){
    array_pop($Array);
}

$C = count($Array)-1;
if(isset($Array[$C]) && empty($Array[$C])){
    array_shift($Array);
}

它会删除第一个和最后一个行。

如果你想删除所有的第一个和最后一个但只是空的,你需要这样做:

$Array = array('', Allo, '', '', 'Toc', '', '', '');

$i=0;
foreach($Array as $Key => $Value){
    if(empty($Value)){
        unset($Array[$Key]);
    } else {
        break;
    }
    $i++;
}

$Array = array_reverse($Array);
$i=0;
foreach($Array as $Key => $Value){
    if(empty($Value)){
        unset($Array[$Key]);
    } else {
        break;
    }
    $i++;
}

$Array = array_reverse($Array);

答案 2 :(得分:0)

您可以使用

array_pop($array); // remove the last element
array_shift($array); // remove the first element

您可以先进行一些简单的检查,以确保第一个和/或最后一个索引为空

答案 3 :(得分:0)

这是另一种方法:

<?php

$array = array('', '', 'banana', '', 'orange', '', '', '');

while ($array[0] == '')
{
    array_shift($array);
}

$count = count($array);

while ($array[$count - 1] == '')
{
    array_pop($array);
    $count--;
}

print_r($array);

?>

答案 4 :(得分:0)

以下代码段将完成此任务:

function removeStartingEmptyIndexes($array)
{
  foreach($array as $i => $item)
  {
    if(!empty($item)) {
      break;
    }
    else
    {
      unset($array[$i]);
    }
  }

  return $array;
}

function trimEmptyIndexes($array)
{
  return array_reverse(removeStartingEmptyIndexes(array_reverse(removeStartingEmptyIndexes($array))));
}

$array = array("", "", "apple", "orange", "", "", "", "lemon", "", "");

$array = trimEmptyIndexes($array);

只需调用“trimEmptyIndexes($ array)”

答案 5 :(得分:-1)

试试这个

foreach ($original_array as $index => $val) {
  if (is_empty($val)) {
    unset($original_array [$index]);
  } else {
    break;
  }

}

答案 6 :(得分:-1)

while(strlen($array[0])==0)
    unset(array[0]);

$doLoop=(strlen($array[ count(array)-1 ])==0);
while ($doLoop){
    unset($array[ count(array)-1 ]);
    $doLoop=(strlen($array[ count(array)-1 ])==0);
}