在数组上使用 unset(),但它保留值

Using unset() on an array, but it keeps the value

如果某个对象的属性之一为 null 或空,我将尝试从数组中删除该对象,这是代码。

已使用此函数对数组进行排序:

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,但发送的数组是包含每个对象的整个数组。

count($myArray)就是"problem"。
一旦 unset() 为 "reached" ,数组中就会少一个元素,因此下一次调用 count($myArray) 将 return 前一次迭代的 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