php遍历数组问题

一、遍历数组的三种方式

(1)for循环:只能遍历索引数组
$arr=array('a','b','c');
$size=count($arr);
for ($i=0;$i<$size;$i++){
    echo $arr[$i];
}
(2)foreach循环:可以遍历索引数组和关联数组
$arr=array(
    'one'=>1,
    'two'=>2,
    'three'=>3
);

foreach ($arr as $val){
    echo $val.'</br>';
}
foreach ($arr as $key=>$val){
    echo $key.'=>'.$val.'</br>';
}
(3)while、list()、each()组合循环:可以遍历索引数组和关联数组

each函数:

$arr=array(
    'one'=>1,
    'two'=>2,
    'three'=>3
);

$lst=each($arr);
var_dump($lst);
/*结果
 array (size=4)
  1 => int 1
  'value' => int 1
  0 => string 'one' (length=3)
  'key' => string 'one' (length=3)
 */

//下一次each时将移动到下一个元素
$lst=each($arr);
var_dump($lst);
/*结果
   1 => int 2
  'value' => int 2
  0 => string 'two' (length=3)
  'key' => string 'two' (length=3)
 */

list函数:将数组中的以整数为键值的元素按键值从小到大的顺序赋给自己的参数。

$arr=array(
    'one'=>1,
    'two'=>2,
    'three'=>3
);

$lst=each($arr);
var_dump($lst);
/*结果
 array (size=4)
  1 => int 1
  'value' => int 1
  0 => string 'one' (length=3)
  'key' => string 'one' (length=3)
 */

list($key,$val)=$lst;
echo $key.'=>'.$val;
//结果  one=>1

while、list()、each()组合循环:

$arr=array(
    'one'=>1,
    'two'=>2,
    'three'=>3
);

while (list($key,$val)=each($arr)){
    echo $key.'=>'.$val.'</br>';
}
/*结果
  one=>1
  two=>2
  three=>3
 */

二、foreach引用修改问题

$arr=array(
    'one'=>1,
    'two'=>2,
    'three'=>3
);

foreach ($arr as &$k){
    $k=$k*2;
}
var_dump($arr);

foreach ($arr as $k){
    echo $k."</br>";
}
var_dump($arr);

结果是:
这里写图片描述
Why?
Because:
这里写图片描述
解决方法:

$arr=array(
    'one'=>1,
    'two'=>2,
    'three'=>3
);

foreach ($arr as &$k){
    $k=$k*2;
}
var_dump($arr);

unset($k);//取消引用

foreach ($arr as $k){
    echo $k."</br>";
}
var_dump($arr);

结果:
这里写图片描述

三、指针重置

while、list()、each()组合不会reset(),即指针重置,foreach遍历会对数组进行reset()操作。
什么意思呢?

$arr=array(
    'one'=>1,
    'two'=>2,
    'three'=>3
);

while (list($key,$val)=each($arr)){
    echo $key.'=>'.$val.'</br>';
}
/*结果
  one=>1
  two=>2
  three=>3
 */

while (list($key,$val)=each($arr)){
    echo $key.'=>'.$val.'</br>';
}
/*结果为空 --> 指针还是指向最后一个

 */
$arr=array(
    'one'=>1,
    'two'=>2,
    'three'=>3
);

while (list($key,$val)=each($arr)){
    echo $key.'=>'.$val.'</br>';
}
/*结果
  one=>1
  two=>2
  three=>3
 */

reset($arr);//重置指针

while (list($key,$val)=each($arr)){
    echo $key.'=>'.$val.'</br>';
}
/*结果
  one=>1
  two=>2
  three=>3
 */

而foreach内置reset()函数,在调用完foreach的时候,系统指针就会重新指向第一个,因此不需要在foreach之前调用reset()函数!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值