Ph**P中foreach()用法汇总

时间:2016.04.18 发布人:NY0424

Ph**P中foreach()用法汇总

已解决问题

谷歌NY0424用户在2016.04.18提交了关于“锦绣未央Ph**P中foreach()用法汇总”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-03-12T22:05:52。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !

希望以下的回答,能够帮助你。

第1个回答

用户名:yilinjaycool  

Ph**P4引入了foreach结构,和Perl以及其他语言很像。这只是一种遍历数组简便方法。foreach减仅能用于数组,当试图将其用于其它**类型或者一个未初来自始化的变量时会**生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。

foreach(a查养音次犯rray_exp纸害层乎清文ressionas$value)statementfor331215问答each(array_expressionas$key=>$v预长alue)statement

第一种格式遍历给定的array_expression数组。每次循环中,当前单元的值被赋给$value并且数组约印普设以夜适领类低**的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只是除了当前单预元的键名也会在每次循环中被赋给变量$key。

先来看第一个语句,这个语句比较简单,array_expression指的是一个数组表达式,as$val语句将顺序取得该数组的值并保存到$val变量中,此种方法只能取得数组内的值,而不能取得数组的下标索引值。例如:

$myArray=array("1"=>"val1","2"=>"val2","3"=>"val3");foreach($myArrayas$val){print($val."");}

其结果会输出:val1val2val3

再来看看第二种格式,第二种格式除了能像第一种格式一样得到实志数组内元素的值外,还能得到元素的索引值,并保存到$key变量中,如果数组的索引值未经过人工设定,则返回系统默认的设定值,
看正面例子洲粮执扩宽油举留更于钟:

先看一个简单的一维数组:

$myArray=a介济裂向何饭年汉rray("1"=>"va矛切很末乙迫l1","2"="val2","3"还好物待来作死滑片划=>"val3");foreach($myArrayas$key=>$v风东慢刑觉al){print($key."=>".$val.";");}

该程序将出输出:1=>val1;2=>val2;3=>val3;,接下来我们再来看一个复杂一点的二维数组遍历,程序如下:

$myArray=array("1"=>array("11"=>"val11","12"=>"val12","13"=>"val1究器菜映部3"),"2"=>array("21"=>"val21","22"=>"val22","23"=>"val23"),"3"=>array("31"=>"val31","32"=>"val32","33"=>"val33"));print("<ul>");foreach($myArrayas$key=>$val){print("<li>".$key."</li>");if(is_array(使银指科责$val)){//判断$val作并未春独饭环的值是否是一个数组,如果是,则进入下层遍历print("<ul>");foreach($valas$key=>$val){print("<li>".$key."=>".$val."</li>");}print("</ul>");}}print("</ul>");

输出结果:

111=>val1112=>val1213=>val1准立处它艺群3221=>val2122=>val2223=>val23331=>val3132=>val3233=>val33

<ul>和<li>是标签,作用是显示个实心小圆点和空心小圆点。
由于上面的是一个二维数组,在第一次遍历后所得到的$val值将是一个数组,所以我在遍历中加了一个判断,以便进行二层数组遍历。

再通过一个实例解惑

<?php$a=array("1"=>"语文","2"=>"数学","3"=>"英语");$b=array("1"=>"95","2"=>"99","3"=>"92");foreach($aas$key=>$value){echo$value;echo$b[$key]."<br>";}?>

问题是为什么输出数组$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_nameas$value){statement;}

这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组**的下标向下移一步,也就是下次循环回得到下一个元素。

2:foreach(array_nameas$key=>$value){statement;}

这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中被赋给变量$key。键值可以是下标值,也可以是字符串。比如book[0]=1中的“0”,book[id]="001"中的“id”.

以上所述就是本文的全部内容了,希望大家能够喜欢。