2010-08-01 85 views
0

我在使用unset()后失去数组顺序时遇到了一些麻烦。下面的代码第一:PHP未设置+未定义偏移

$id = $_GET['id']; 
for($i = 0; $i < count($my_array); $i++) 
{ 
    if($my_array[$i] == $id) 
    { 
     unset($my_array[$i]); 
    } 
} 

假设$ my_array有4个项目和$ my_array [1]等于$ ID。在我解决之后,我尝试在$ my_array上运行一个foreach(),并获取和未定义偏移:1错误。当我运行print_r($ my_array)时,我得到$ my_array [0],$ my_array [2]和$ my_array [3]。

我完全理解为什么会发生这样的事情,我的问题是,是否有一种重新索引数组的方法,使项目2'下降'到项目1,其余项目分别到数组的末尾?

像reindex($ my_array)会很甜。我知道我可以用一个新阵列来运行另一个循环并手动传输它们,但是一步解决方案会非常棒。我什么都找不到。

回答

2

请致电array_values重新索引数组。

+0

老兄你摇滚。虽然我已经尝试过了。我们只是责备这一个是在凌晨2点以后;) 再次感谢 – 2010-08-01 06:13:17

+0

@亚当那么,已经过了7点在这里:我想我也会去睡觉。 – Artefacto 2010-08-01 06:19:32

+0

@Adam顺便说一句,在'unset'之后,你可以用foreach迭代现在一个元素短的数组。如果因为要迭代for循环而重新索引,则不必要;只需使用'foreach'或'reset'和'next'即可。 – Artefacto 2010-08-01 06:29:15

0

我刚刚发现,你也可以做一个

array_splice($ar, 0, 0); 

这确实重新索引就地,这样你就不会与原数组的副本结束。