2012-11-02 62 views
0

我有一個數組那是我在會議lifeFleetSelectedTrucksList 攜帶我也有類的對象一個對象fleetUnit從陣列中移除物體;如何避免空

class fleetUnit { 
    public $idgps_unit = null; 
    public $serial = null; 
} 

class lifeFleetSelectedTrucksList { 
    public $arrayList = array(); 
} 

$listOfTrucks = new lifeFleetSelectedTrucksList(); //this is the array that I carry in session 
if (!isset($_SESSION['lifeFleetSelectedTrucksList'])) { 
    $_SESSION['lifeFleetSelectedTrucksList'] == null; //null the session and add new list to it. 
} else { 
    $listOfTrucks = $_SESSION['lifeFleetSelectedTrucksList']; 
} 

我使用它來從數組中刪除元素:

$listOfTrucks = removeElement($listOfTrucks, $serial); 

這是我的功能,刪除元素並返回沒有元素的數組:

function removeElement($listOfTrucks, $remove) { 
    for ($i = 0; $i < count($listOfTrucks->arrayList); $i++) { 
     $unit = new fleetUnit(); 
     $unit = $listOfTrucks->arrayList[$i]; 
     if ($unit->serial == $remove) { 
      unset($listOfTrucks->arrayList[$i]); 
      break; 
     } elseif ($unit->serial == '') { 
      unset($listOfTrucks->arrayList[$i]); 
     } 
    } 
    return $listOfTrucks; 
} 

嗯,它的工作原理 - 元素被刪除,但我有數組,它有一堆空vaues代替。我如何返回不包含空元素的數組?似乎我並沒有起訴正確的東西。

+0

使用http://php.net/manual/en/function.array-filter.php –

回答

3

我想你的意思是,數組鍵是不連續的了。除非將值設置爲null,否則PHP中的數組不包含「空值」。

$array = array('foo', 'bar', 'baz'); 
// array(0 => 'foo', 1 => 'bar', 2 => 'baz'); 

unset($array[1]); 

// array(0 => 'foo', 2 => 'baz'); 

兩種方法可供:

  1. 循環使用foreach在陣列上,而不是一個「手動」 for循環,那麼它都不會有問題的關鍵是什麼。
  2. 使用array_values重置密鑰。

而且,從列表中刪除的卡車應該真正的$listOfTrucks的方法,像$listOfTrucks->remove($remove)。你已經在使用對象,充分利用它們的潛力!

+0

使用foreach解決了這個問題 – Andrew

1

您可以使用array_filter

<?php 

$entry = array(
     0 => 'foo', 
     1 => false, 
     2 => -1, 
     3 => null, 
     4 => '' 
    ); 

print_r(array_filter($entry)); 
?> 

輸出:

Array 
(
[0] => foo 
[2] => -1 
) 
+0

那麼,這是正常的嗎? 'unset'是否應該留下空位? – Andrew

+0

不,它不應該給數組null。 –