详细解释foreach在PHP中的用法和例子
Foreach在PHP中经常使用,如果使用foreach,就必须使用数组。因此,在本文中,我们将讨论数组和foreach。
Foreach有两种语法:
首先是遍历给定的数组语句array_expression数组。在每个循环中,当前单元格的值被赋给$value,数组内部的指针向前移动一步(因此在下一个循环中将获得下一个单元格)。
foreach(array _ expression as $ value)第二个与上面相同,当前单元的键名也将分配给每个循环中的变量$key。
foreach(array _ expression as $ key=$ value)我们一个一个来解释吧!
1.一维普通数组和foreach
我们先写一个一维数组,如下所示:
$a=数组(‘汤姆’、‘玛丽’、‘彼得’、‘杰克’);1.我们使用第一个foreach方法来输出。
foreach ($a as $value) { echo $value。br/';}最终结果是:
汤姆玛丽彼得杰克
2.我们使用第二个foreach方法来输出。
foreach($ a as $ key=$ value){ echo $ key。','.$值。br/';}最终结果是:
0,汤姆1,玛丽2,彼得3,杰克
总结:很明显,我们看到多了一个$key,这个$key的值就是序列号1、2、3、4等等!
第二,一维关联数组和foreach
一维关联数组如下:
$b=数组(' a'='Tom ',' b'='Mary ',' c'='Peter ',' d '=' Jack ');有些人喜欢这样写,如下:
$b=数组(' a'='Tom ',' b'='Mary ',' c'='Peter ',' d '=' Jack ');1、我们使用第一个foreach方法输出与上面相同的内容。
foreach ($b作为$value) { echo $value。br/';}最终结果是:
汤姆玛丽彼得杰克
2.我们使用第二个foreach方法来输出。
foreach($ b as $ key=$ value){ echo $ key。','.$值。br/';}最终结果是:
一、古墓丽影、玛丽卡、彼得、杰克
总结:显然,在一维关联数组下,$key是关联的序列号,也就是对应的a、b、c、d。
三维普通数组和foreach
遍历二维数组有点麻烦。为什么呢?因为遍历的值是一个数组,因为它是一个数组,所以您可以对数组执行各种操作!
我们先来看一个基本的二维数组,如下所示:
$c=array(array('1 ',' Tom ')、array('2 ',' Mary ')、array('3 ',' Peter ')、array('4 ',' Jack '));1.我们采用第一种foreach方法:
foreach($ c as $ value){ print _ r($ value);echo ' br/';}获得结果:
数组([0]=11 [1]=Tom)数组([0]=22 [1]=Mary)数组([0]=33 [1]=Peter)数组([0]=44 [1]=Jack)
2.我们采用第二种方法:
foreach($ c as $ key=$ value){ echo ' $ key='。$key。br/';print _ r($ value);echo ' br/';}获得以下结果:
$ key=0 array([0]=11[1]=Tom)$ key=1 array([0]=22[1]=Mary)$ key=2 array([0]=33[1]=Peter)$ key=3 array([0]=44[1]=Jack)
总结:从上面可以看出,基本的二维数组,$key就是序列号,比如0\1\2\3等等!
4.将2D数组与foreach相关联
描述:关联2D阵列可以在实际项目中使用更多。为什么呢?通常,从数据库中提取的数据都是相关的二维数组。学习了二维数组的关联后,在PHP的实战中已经掌握了很大一部分!
然后首先列出关联的二维数组,如下所示:
$d=array(array('id'='11 ',' name'='Tom '),array('id'='22 ',' name'='Mary '),array('id'='33 ',' name'='Peter '),array('id'='44 ',' name '=' Jack '));1、使用第一种方法代码:
foreach ($d为$ value){ print _ r($ value);echo ' br/';}结果如下:
数组([id]=11 [name]=Tom)数组([id]=22 [name]=Mary)数组([id]=33 [name]=Peter)数组([id]=44 [name]=Jack)
显然,关联和非关联的区别在于,非关联的前面是0/1等等,而关联则是显示具体的姓名id/姓名等等。
2.使用第二种方法的代码:
foreach($ d as $ key=$ value){ echo ' $ key='。$key。br/';print _ r($ value);echo ' br/';}结果如下:
$ key=0 array([id]=11[name]=Tom)$ key=1 array([id]=22[name]=Mary)$ key=2 array([id]=33[name]=Peter)$ key=3 array([id]=44[name]=Jack)
总结:这里$key还是0/1/2/3。
动词(verb的缩写)工程中的实际应用
注意:在项目中,数组有很多变化,当然foreach贡献很大!当然,虽然,每个等等也可以用,但是foreach是最方便的!简单说一下实战中常见的一些项目吧!
实战一:把二维联想阵改成一维普通阵
这也是关联二维数组的第四个列表,如下所示:
$d=array(array('id'='11 ',' name'='Tom '),array('id'='22 ',' name'='Mary '),array('id'='33 ',' name'='Peter '),array('id'='44 ',' name '=' Jack '));现在我们只需要名称列的内容。当然,我们可以通过以下方式来实现。
foreach($ d as $ key=$ value){ echo($ value[' name ']);echo ' br/';}但有时我们必须将其列为一维数组,因此我们有以下方法:
//获取名称列作为一维数组$ namerer=array();//name列foreach($ d as $ key=$ value){ $ name arr[]=$ value[' name '];} print _ r($ NameArr);上图,通过赋值一个空数组值,空数组foreach等于我们的值,得到一个新数组!上述代码的结果如下:
数组([0]=Tom[1]=Mary[2]=Peter[3]=Jack)这个数组显然是一维普通数组,如下所示:
$d=数组('汤姆','玛丽','彼得','杰克');好了,把二维关联数组改成一维普通数组,写在这里!
实战二:二级分类和无限分类
显然,我们从数据库中得到的数据是一个二维数组和一个二维关联数组。那么,我们如何取出父分类呢?如何检索父分类对应的子分类?
首先要注意的是,几乎所有的分类都是一个数据库模式,所以我们有必要了解它的结构以及如何检索相应的数据!
为了方便解释,我从网上找了一个更好的例子,那就是“新闻分类”!
好了,我们开门见山吧!让我们先写一个数组。
//从数据库检索的分类数据$ original _ array=array(array(' ID '=1,' PID'=0,' name'=' news classification '),array('id'=2,' pid'=0,' name'='最新公告'),array()。Name'='国内新闻')、array('id'=4、' pid'=1、' name'='国际新闻')、array('id'=5、' pid'=0、' name'='图片分类')、array ('id'=6同时,数据库看起来是这样的。
注意:数据库的分类是这样的!拿出来的阵也是这样的!一般都这样!
//从数据库检索的分类数据$ original _ array=array(array(' ID '=1,' PID'=0,' name'=' news classification '),array('id'=2,' pid'=0,' name'='最新公告'),array()。Pid'=1,' name'='国内新闻')、array('id'=4,' pid'=1,' name'='国际新闻')、array('id'=5,' pid'=0,' name'='图片分类')、array Pid'=5,' name'='新闻图片')、array('id'=7,' Pid'=5,' name'='其他图片');所以,首先,我们要知道自己想要什么。这个:我们需要知道!(之前对这方面了解不多,经常用开源程序,所以这方面写的不是很好。)
这就是我们想要的最终结果!(我不怕笑话。我请朋友帮我解决这个问题!)
//整理后的分类数据$ output _ array=array(array(' id '=1,' pid'=0,' name'='新闻分类,' children'=array(array('id'=3,' pid'=1,' name'='国内新闻),数组(' id'=4,' pid'=1,' name'='国际新闻),),),数组(' id'=2,' pid'=0,' name'='最新公告,),数组(' id'=5,' pid'=0,' name'='图片分类,' children'=array(array('id'=6,' pid'=5,' name'='新闻图片),数组(' id'=7,' pid'=5,' name'='其它图片' ), ), ),);很明显,这里数组多了一个字段,就是孩子们!
那么,怎么从$原始_数组变为$输出_数组呢?这里有我一个朋友做的函数,当然也用到foreach!
函数如下:
//整理函数/** * 生成无限级树算法* @作者白宇2014-04-01 * @param array $arr输入数组* @param number $pid根级的pid * @param字符串$列名列名,id|pid父编号的名字|儿童子数组的键名* @返回数组$ ret */函数make_tree($arr,$pid=0,$ column _ name=' id | PID | children '){ list($ idname,$pidname,$cldname)=explode('| ',$ column _ name);$ ret=array();foreach($ arr as $ k=$ v){ if($ v[$ PID name]==$ PID){ $ tmp=$ arr[$ k];unset($ arr[$ k]);$tmp [$cldname]=make_tree($arr,$v [$idname],$ column _ name);$ ret[]=$ tmp;} }返回$ ret}那们怎么使用呢?
//整理函数的使用$ output _ array=make _ tree($ original _ array);完整使用方法如下:
$output_array=make_tree($arr,0,' id|pid|children ')函数之后,我们这样调用就得到了一级分类与二级分类!
foreach($ output _ array as $ key=$ value){ echo ' H2 ' .$value['name']./H2 ';foreach($ value[' children ']作为$ key=$ value){ echo $ value[' name ']。';}结果如下:
附:$输出_数组这个数组,我们使用print_r,就可以得到如下的结果!
数组([0]=数组([id]=1 [pid]=0 [name]=新闻分类[子项]=数组([0]=数组([id]=3[PID]=1[name]=国内新闻[子项]=Array())[1]=Array([id]=4[PID]=1[name]=国际新闻[子项]=Array())))))[1]=Array([id]=2[PID]=0[name]=最新公告[子项]=Array())[2]=Array([id]=5[PID]=0[name]=图片分类[子项]=数组([0]=数组([id]=6[PID]=5[name]=新闻图片[子项]=Array())[1]=Array([id]=7[PID]=5[name]=其它图片[子项]=Array()))))以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:详细解释foreach在PHP中的用法和例子是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。