我只是想删除所有将"可见"设置为"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"}
}
在我看来,这应该有效并返回 {"计数":0}。还有为什么"键"没有设置为 0,1 而不是 3,4。我哪里出错了?
),每次迭代都会重新计算它,所以在你取消设置前三次后,i 是 3,但 count($arr)-1) 是 1,然后你退出循环。您应该在 for 循环之前设置 $j=count($arr)-1,并使用 for($i = 0; $i <$j; $i++)
一般来说,在 for 循环中使用 count() 等函数是一种糟糕的编程实践(性能方面)。
如果从数字数组中间删除索引,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()
函数。