2012-04-19 15 views
1

兩側刪除空的項目,我有以下陣列:PHP從數組

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

我怎樣才能把開頭和結尾的空項,而不是從裏面?最終的陣列應該是這樣的:

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

回答

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); 
+0

如果不是這是在某種循環中? – 2012-04-19 15:15:06

+0

@火箭爲什麼?如果你只想刪除第一個和最後一個空,不,因爲你已經知道一個人是第一個也是最後一個,所以你只需要檢查它們是否爲空。如果你想刪除所有的第一個和最後一個誰是空的,那麼是的,你需要一個循環,看到我的第二個腳本。 – 2012-04-19 15:17:18

+0

原始帖子清楚地顯示了兩個項目從陣列的開始,而不僅僅是一個。你的編輯解決了這個問題,但只是在這一個上備份@Rocket ... – Dutchie432 2012-04-19 15:22:34

-1

試試這個

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

} 
+0

除了他想要「蘋果」和「橙色」之間的空白仍然存在。 – 2012-04-19 15:14:42

+0

@火箭很好,但我已經在編輯它了。 – Churk 2012-04-19 15:16:05

0

您可以使用

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

您可以在進行一些簡單檢查之前確保第一個和/或最後一個索引爲空

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

+0

乾淨和性感。只爲第一個和最後一個空的工作。但是如果你仔細觀察,[0]和[1]是空的並且從「應該看起來像這樣」中消失......也許是一個錯誤? – 2012-04-19 15:18:34

+0

@DavidBélanger:呃,什麼是錯誤? – 2012-04-19 15:20:22

+0

哇,我比我的建議更喜歡這個! +1先生 – Dale 2012-04-19 15:21:24

-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); 
} 
+1

如果未對數組進行數字索引,將無法工作。 – Jon 2012-04-19 15:21:56

+0

....其中,如果你閱讀原文,數組是。 – Dutchie432 2012-04-19 15:23:33

+0

沒錯。爲什麼選擇一種適用於汽車和飛機的解決方案呢,當你的解決方案可以在汽車中使用時呢? – Jon 2012-04-19 15:24:50

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

?> 
+1

與其他解決方案一樣,如果數組未被數字化索引,這將不起作用。 – Jon 2012-04-19 15:23:09

+0

儘管您的陳述完全正確,但他的數組是按數字索引的。 – Dale 2012-04-19 15:25:00

+0

@戴爾:我想這只是一個參考:-P – 2012-04-19 15:26:09

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($陣列)」