找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 844|回复: 0
打印 上一主题 下一主题

PHP中foreach()用法汇总

[复制链接]

2536

主题

2536

帖子

7532

积分

论坛元老

Rank: 8Rank: 8

积分
7532
跳转到指定楼层
楼主
发表于 2018-2-14 05:44:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach (array_expression as $value)
  statement
foreach (array_expression as $key => $value)
  statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只是除了当前单元的键名也会在每次循环中被赋给变量 $key。
先来看第一个语句,这个语句比较简单,array_expression指的是一个数组表达式,as $val语句将顺序取得该数组的值并保存到$val变量中,此种方法只能取得数组内的值,而不能取得数组的下标索引值。例如:
$myArray=array("1"=>"val1","2"=>"val2","3"=>"val3");
foreach($myArray as $val) {
   print($val." ");
}
其结果会输出:val1 val2 val3
再来看看第二种格式,第二种格式除了能像第一种格式一样得到数组内元素的值外,还能得到元素的索引值,并保存到$key变量中,如果数组的索引值未经过人工设定,则返回系统默认的设定值,
看正面例子:
先看一个简单的一维数组:
$myArray=array("1"=>"val1","2"="val2","3"=>"val3");
foreach($myArray as $key=>$val) {
   print($key."=>".$val.";");
}
该程序将出输出:1=>val1;2=>val2;3=>val3;,接下来我们再来看一个复杂一点的二维数组遍历,程序如下:
$myArray=array(
   "1"=>array("11"=>"val11","12"=>"val12","13"=>"val13"),
   "2"=>array("21"=>"val21","22"=>"val22","23"=>"val23"),
   "3"=>array("31"=>"val31","32"=>"val32","33"=>"val33")
);
print("");
foreach($myArray as $key=>$val) {
   print("
  • ".$key."");
       if (is_array($val)) {   //判断$val的值是否是一个数组,如果是,则进入下层遍历
         print("");
        foreach($val as $key=>$val) {
           print("
  • ".$key."=>".$val."");
         }
         print("
    ");
       }
    }
    print("
    ");
    输出结果:
      1
        11=>val11
        12=>val12
        13=>val13
      2
        21=>val21
        22=>val22
        23=>val23
      3
        31=>val31
        32=>val32
        33=>val33
  • 是 标签,作用是显示个实心小圆点和空心小圆点。
    由于上面的是一个二维数组,在第一次遍历后所得到的$val值将是一个数组,所以我在遍历中加了一个判断,以便进行二层数组遍历。
    再通过一个实例解惑
    "语文","2"=>"数学","3"=>"英语");
    $b = array("1"=>"95","2"=>"99","3"=>"92");
    foreach($a as $key=>$value){
      echo $value;
    echo $b[$key]."
    ";
    }
    ?>
    问题是为什么输出数组$b中的值要用$b[$key]而不是$b[$value]?
    这是为什么呢?
    $a = array("1"=>"语文","2"=>"数学","3"=>"英语");
    上面这个和下面这个是完全一样的
    $a[1]="语文";
    $a[2]="数学"
    $a[3]=“英语”
    我们输出上面的数组是怎么输出的呢?
    肯定是echo $a[1];
    对不对?
    如果没有疑问我们继续!!!!
    ------------------------------
    简单说foreach
    它的格式是这样的foreach(数组名 as 下标=>值)
    下标也就是上面的$a[1],这里的1就是数组的下标!
    到这你应该明白了,为什么是$a[$key]这样输出
    你记住不管怎么变,数组的输出方法永远是$a[1],不会是$a['语文']
    ================================================================
    foreach()有两种用法:
    1: foreach(array_name as $value){
        statement;
      }
    这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一步,也就是下次循环回得到下一个元素。
    2:foreach(array_name as $key => $value){   
        statement;  
    }  
    这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中被赋给变量$key。键值可以是下标值,也可以是字符串。比如book[0]=1中的“0”,book[id]="001"中的“id”.
    以上所述就是本文的全部内容了,希望大家能够喜欢。
                
                
    您可能感兴趣的文章:
  • php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
  • PHP循环遍历数组的3种方法list()、each()和while总结
  • php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
  • 浅谈PHP中foreach/in_array的使用
  • PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
  • PHP中使用foreach()遍历二维数组的简单实例
  • PHP 数组遍历foreach语法结构及实例
  • 浅谈PHP中关于foreach使用引用变量的坑
  • php each 返回数组中当前的键值对并将数组指针向前移动一步实例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端