2015-07-12 37 views
0

我想從數組中刪除一個對象,如果他的某個屬性爲null或空,這是代碼。在數組上使用unset(),但它保留值

的陣列已經使用這個功能來分類:

function sortArray($c1, $c2) 
{ 
    return ($c1->propertyToCheck < $c2->propertyToCheck); 
} 

如果它改變任何東西。

$myArray = array(); 
... 
// Add values to the array here 
... 
usort($myArray,"sortArray"); 

for($i = 0; $i < count($myArray); $i++) 
{ 
    if(empty($myArray[$i]->propertyToCheck)) 
    { 
     unset($myArray[$i]); 

     // var_dump($myArray[$i]) returns NULL 
    } 
} 

echo json_encode($myArray); 
// Returns the entire array, even with the values that shouldn't be there. 

該代碼是在一個函數內,但數組是在所述函數內部創建的。

我使用echo json_encode($ myArray)將值發回AJAX,但發送的數組是其中每個對象的整個數組。

+0

我總是困惑,當我看到一個'爲()'循環數組,而不是'的foreach()在' – 2015-07-12 22:50:48

+1

PHP保留數字索引,你肯定有前項相同數量和之後? – spenibus

回答

3

count($myArray)是「問題」。
一旦unset()被「達到」,數組中就會少一個元素,因此下一次調用count($myArray)將返回前一次迭代的n-1 - >您的循環不會到達數組的末尾。
你至少有三種選擇(在我的偏好依次遞增)

一)

$maxIdx = count($myArray); 
for($i = 0; $i < $maxIdx; $i++) { 

B)

foreach($myArray as $key=>$obj) { 
    if(empty($obj->propertyToCheck)) { 
     unset($myArray[$key]); 

C)

$myArray = array_filter(
    $myArray, 
    function($e) { 
     return !empty($e->propertyToCheck); 
    } 
); 

(.. 。等等)

還看到:http://docs.php.net/array_filter