遍历一个数组,删除了数组中的某一个元素,是数组中的键值重新排列 可以使用 array_splice() 结合array_search()使用 。或者是遍历数组的时候:unset() 这个元素之后,使用array_values() 处理数组。array_values()是取出数组中元素的值,放进一个以数字为索引的新数组里面,从而达到了对数组键值重新排列的效果。
array_search() & array_splice():
$arr = array('0' => '321','1' => '322','2' => '323','3' => '324','4' => '325','5' => '326',);
$key=array_search('324',$arr);
array_splice($arr,$key,1);
var_dump($arr);
array_search() & unset():
- $tmp = '324';
- $arr = array(
- '0' => '321',
- '1' => '322',
- '2' => '323',
- '3' => '324',
- '4' => '325',
- '5' => '326',
- );
- foreach( $arr as $k=>$v) {
- if($tmp == $v) unset($arr[$k]);
- }
- $arr = array_values($arr);
- print_r($arr);
Note:
有一个问题可以注意一下:
当遍历一个数组进行处理的时候:
$arr = array('a','b','bb','d');
for ($i=0;$i<count($arr);$i++){
if(strpos($arr[$i],'b')!==false){
for ($i=0;$i<count($arr);$i++){
if(strpos($arr[$i],'b')!==false){
//$i = 1
//$arr[1]=a
//$arr[2]='bb'
array_splice($arr,$i,1);
array_splice($arr,$i,1);
//$i = 1
//$arr[1] ='bb'
//$arr[2]='d'
}
}
}
}
//output: Array ( [0] => a [1] => bb [2] => d )
print_r($arr);
print_r($arr);
我原本是想要删除数组中所有含有b的元素。结果却如此,原因就是当执行了array_splice()后,数组原来的顺序被重新定义了,原本下次循环才被处理的元素,索引变成了现在正操作的索引,也就是说下次循环的时候就跳过了原来元素的下一位。所以在这种两个相邻元素都需要被处理的情况下,就出问题了。