我只是想删除所有将'visible'设置为'0'
的Array对象阵列:
{
"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。我哪里错了?
答案 0 :(得分:2)
你在for循环中使用count($ arr)-1),并且每次迭代都会重新计算,所以在你取消前三次后,我是3,但是count($ arr)-1)是1,然后退出循环。 你应该在for循环之前设置$ j = count($ arr)-1,并使用for($ i = 0; $ i&lt; $ j; $ i ++)
一般来说,在for循环中使用count()等函数是不好的编程习惯(性能方面)
答案 1 :(得分: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()
。