我有以下数组:
Array
(
[0] =>
[1] =>
[2] => apple
[3] =>
[4] => orange
[5] => strawberry
[6] =>
)
如何从开头和结尾删除空项目,但不能从内部删除?最终数组应如下所示:
Array
(
[0] => apple
[1] =>
[2] => orange
[3] => strawberry
)
这是一个方便的方法:
while (reset($array) == '') array_shift($array);
while (end($array) == '') array_pop($array);
强制性评论:我正在使用与空字符串的松散比较,因为它看起来像您在给出示例时想要的那样。如果您想对要删除的元素更加挑剔,请相应地自定义条件。
更新:额外的标志性 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);
你去吧:
$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);
Here's another method:
<?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);
?>
以下代码段将完成这项工作:
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)”
您可以使用
array_pop($array); // remove the last element
array_shift($array); // remove the first element
您可以在确保第一个和/或最后一个索引为空之前进行一些简单的检查
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);
}
尝试这个
foreach ($original_array as $index => $val) {
if (is_empty($val)) {
unset($original_array [$index]);
} else {
break;
}
}