PHP 未设置未按预期工作



我只是想删除所有将"可见"设置为"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。我哪里出错了?

你在 for 循环中使用 count($arr)-1

),每次迭代都会重新计算它,所以在你取消设置前三次后,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()函数。

相关内容

  • 没有找到相关文章

最新更新