PHP循环数组的3种方式

PHP遍历数组的方法经常用到的有:

 

  1. for循环遍历
  2. foreach遍历
  3. each结合while、list遍历

for循环遍历

<?php
/**
 * 1.for循环遍历-只能针对索引数组
 */
$for_arr     = [1, 2, 3];
$for_arr_len = count($for_arr);
for($i = 0; $i < $for_arr_len; $i++) {
   echo $for_arr[$i] . PHP_EOL;
}
 
//关联数组
$for_arr2 = ['a' => 1, 'b' => 2, 'c' => 3];
$key_arr = array_keys($for_arr2);
for($i = 0; $i < $for_arr_len; $i++) {
   echo 'key=' . $key_arr[$i] . ', value=' . $for_arr2[$key_arr[$i]] . PHP_EOL;
}

foreach遍历

注意:foreach遍历即可用于索引数组也可用于关联数组

/**
 * 2.foreach循环遍历-既能针对索引数组又能针对关联数组
 */
//索引数组
$foreach_arr1 = [1, 2, 3];
foreach($foreach_arr1 as $k1 => $v1) {
   echo 'key=' . $k1 . ', value=' . $v1 . PHP_EOL;
}

//关联数组
$foreach_arr2 = ['a' => 1, 'b' => 2, 'c' => 3];
foreach($foreach_arr2 as $k2 => $v2) {
   echo 'key=' . $k2 . ', value=' . $v2 . PHP_EOL;
}

each 遍历(PHP 7.2.0 起废弃)

注意:each 结合while、list遍历即可用于索引数组也可用于关联数组

/**
 * 3.each结合while、list循环遍历--既能针对索引数组又能针对关联数组
 */
//索引数组
$each_arr1 = [1, 2, 3];
while(list($k1, $v1) = each($each_arr1)) {
   echo 'key=' . $k1 . ', value=' . $v1 . PHP_EOL;
}

//关联数组
$each_arr2 = ['a' => 1, 'b' => 2, 'c' => 3];
while(list($k2, $v2) = each($each_arr2)) {
   echo 'key=' . $k2 . ', value=' . $v2 . PHP_EOL;
}

foreach遍历和each遍历的区别
each()函数的作用是输出当前指针指向的数组元素并且指针在向前移动一位,当前指针已经指向数组元素的末尾的时候,each会返回false。这个时候,如果后面还有代码是通过each循环输出,则返回false,这个时候需要重置指针,让指针指向数组元素的第一个元素。
foreach 每次都会自己重置数组指针,把指针始终指向数组的第一个元素。
两个each

$each_arr = [1, 2, 3];
while(list($k, $v) = each($each_arr)) {  //循环完毕后,数组指针回指向末尾的元素
   var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}

while(list($k, $v) = each($each_arr)) {    //由于指针已经指向数组的末位尾元素,each返回false,不进入循环。
   var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}

结果:
在这里插入图片描述


两个each和reset

$each_arr = [1, 2, 3];
while(list($k, $v) = each($each_arr)) {    //循环完毕后,数组指针会指向末尾的元素
   var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}

reset($each_arr);  // 重置指针即指针指向数组第一个元素

while(list($k, $v) = each($each_arr)) {
   var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}

结果:
在这里插入图片描述


先each后foreach

$each_arr = [1, 2, 3];
while(list($k, $v) = each($each_arr)) {    //循环完毕后,数组指针回指向末尾的元素
   var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}

foreach($each_arr as $k => $v) {  //foreach 每次都会把数组内部指针指向第一个元素
    var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}

 结果:
在这里插入图片描述

​PHP 5 提供了一种定义对象的方法使其可以通过单元列表来遍历,例如用 foreach 语句。默认情况下,所有可见属性都将被用于遍历 

<?php
class MyClass
{
    public $var1 = 'value 1';
    public $var2 = 'value 2';
    public $var3 = 'value 3';

    protected $protected = 'protected var';
    private   $private   = 'private var';

    function iterateVisible() {
       echo "MyClass::iterateVisible:\n";
       foreach($this as $key => $value) {
           print "$key => $value\n";
       }
    }
}

$class = new MyClass();

foreach($class as $key => $value) {
    print "$key => $value\n";
}
echo "\n";

$class->iterateVisible();

var1 => value 1
var2 => value 2
var3 => value 3

MyClass::iterateVisible:
var1 => value 1
var2 => value 2
var3 => value 3
protected => protected var
private => private var
?> 

​总结:foreach通用性最强,推荐使用

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值