代码改变世界

php unset 数组陷阱

2013-08-08 22:08  youxin  阅读(3030)  评论(0编辑  收藏  举报

我们删除一个array,

unset($arr);

想删除某个元素

unsert($arr[i])

一个陷阱是:

unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。

 $a=array(1,2,3);
 for($i=0;$i<sizeof($a);$i++)
 {
     echo $a[$i];
 }
 unset($a[0]);
 
 for($i=0;$i<sizeof($a);$i++)
 {
     echo $a[$i];
 } 

前面输出:1,2,3

后面输出:

Notice: Undefined offset: 0 in F:\xampp\htdocs\php\passValueByReference.php on line 84
2

为什么?

因为unset($a[0])将第1个元素给删除了,但是输出时,我们还从$i=0  开始的,当然就不对了,php可不会自动调整下标的

 $a=array(1,2,3);
 for($i=0;$i<sizeof($a);$i++)
 {
     echo $a[$i];
 }
 unset($a[0]);
 
 
 while(list($k,$v)=each($a))
 {
     echo $k.'->'.$v."<br/>";
 }
  

还可以用array_values输出值.

<?php
$a = array(1 => 'one', 2 => 'two', 3 => 'three');
unset($a[2]);
/* will produce an array that would have been defined as
   $a = array(1 => 'one', 3 => 'three');
   and NOT
   $a = array(1 => 'one', 2 =>'three');
*/

$b = array_values($a);
// Now $b is array(0 => 'one', 1 =>'three')
?>

array_values() 返回 input 数组中所有的值并给其建立数字索引。

<?php
$array 
= array("size" => "XL""color" => "gold");
print_r(array_values($array));
?>

以上例程会输出:

Array
(
    [0] => XL
    [1] => gold
)