0

我只是想删除所有“可见”设置为“0”的数组对象

大批:

{
"Count":5,
"0":{"id":"1","visible":"0"},
"1":{"id":"3","visible":"0"},
"2":{"id":"1","visible":"0"},
"3":{"id":"2","visible":"0"},
"4":{"id":"3","visible":"0"}
}

PHP:

function cleanup($arr) {
    for($i = 0; $i < (count($arr)-1); $i++) {
        if($arr[$i]['visible'] == false) {
            unset($arr[$i]);
        }
    }
    $newarr = array_unique($arr, SORT_REGULAR);
    $newarr['Count'] = count($newarr)-1;

    return $newarr;
}

结果:

{
"Count":2,
"3":{"id":"2","visible":"0"},
"4":{"id":"3","visible":"0"}
}

在我看来,这应该有效并返回 {"Count":0}。另外为什么没有将“键”设置为 0,1 而不是 3,4。我哪里错了?

4

2 回答 2

2

您在 for 循环中使用 count($arr)-1) ,并且每次迭代都会重新评估它,因此在您取消设置前 3 次后,i 为 3,但 count($arr)-1) 为 1,然后你退出循环。您应该在 for 循环之前设置 $j=count($arr)-1 ,并使用 for($i = 0; $i < $j; $i++)

一般来说,在 for 循环中使用 count() 之类的函数是不好的编程习惯(性能方面)

于 2013-10-04T23:52:51.190 回答
1

unset()如果从数字数组的中间删除索引,则不会重新排序数组索引。您需要自己重新索引数组。array_values()在这里很有帮助。

function cleanup($arr) {
    for($i = 0; $i < (count($arr)-1); $i++) {
        if($arr[$i]['visible'] == false) {
            unset($arr[$i]);
        }
    }
    $newarr = array_values(array_unique($arr, SORT_REGULAR));
    return $newarr;
}

Count物业对我来说毫无意义,因此我将其丢弃。您可以改用该功能count()

于 2013-10-04T23:46:17.597 回答