您现在的位置:首页 > 教案格式 > 正文

数组换位置一.介绍 PHP(外文名:PHP: Hyperte(5)

2018-02-02 05:05 网络整理 教案网

end($arr); //将指针移向“最后一个元素”,然后取得该元素的值

each($arr); //取得当前元素的下标和值,然后移动指针到下一个位置。

foreach

==foreach不会主动释放$value==

传递方式

默认值传递,引用传递要在变量前加&(foreach($arr as $key => &$value){...})

$key不能设置为引用传递

因为引用传递不会自动销毁$value所以引用传递注意要手动销毁$value,不然可能不小心通$value修改了数组最后一项。(eg:在两个循环都用$value时第一个用了引用传递,第二个用值传递。会将数组最后一项的值改成倒数第二项)

<?php
$arr = array(1,2,3,4,5);

foreach ($arr as $key => &$value) {
  echo $value;
}
var_dump($arr);//最后一项是5
var_dump($value);//5(没有释放)


foreach ($arr as $key => $value) {
  echo $value;
}
var_dump($arr);//最后一项是4
var_dump($value);//4(因为上面的$value引用传递了,最后$value一直指向数组最后一个元素)

$val = 2;
$value = 1;//现在$value还是指向数组最后一个元素
foreach ($arr as $key => $val) {
  echo $val;
}
var_dump($arr);//最后一项是1
var_dump($val);//1(虽然foreach结束但$val不是2,而是最后一项数组最后一项的值1)

foreach过程中进行修改

foreach默认是原数组上进行遍历。

如果在遍历过程中对数组进行了某种修改或使用了数组指针函数,则会复制数组后在复制的数组上继续遍历循环。

foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。

<?php
$arr = array(‘test1‘=>‘test‘,‘test2‘=>‘test‘,22,33);
echo ‘$value‘;
foreach($arr as $key => $value){
  $arr[] = ‘new‘;
  echo $value;//没有new
}

echo ‘&$value‘;
foreach($arr as $key => &$value){
  //每次加上new会循环这个加上的new,进入循环又会加一个new
  $arr[] = ‘new‘;
  echo $value;//有new并死循环
}

for+next+reset遍历数组

<?php
$arr = array(‘test1‘=>‘test‘,‘test2‘=>‘test‘,22,33);
reset($arr);//数组指针初始化
$len = count($arr);
for($i=0;$i<$len;$i++){
$key = key($arr);//key
$value = current($arr);//value
echo $key,$value;
next($arr);//指针移到下一个元素
}

while+each()+list()遍历数组

<?php
$arr = array(‘test1‘=>‘test‘,‘test2‘=>‘test‘,22,33);
var_dump(each($arr));//四个元素0,1,key,value
list($v1, $v2) = array(‘test‘=>‘test‘,1=>1,2);//将数字索引对应的值放到list的变量中
var_dump($v1, $v2);//null,1

reset($arr);//数组指针初始化
//当each到数组最后的时候,就返回false,即此时循环结束
while(list($key, $value)=each($arr)){
  var_dump($key, $value);
}