【原创】超详解php中的foreach 让你不再迷茫!!!!

来源:互联网 发布:ps3 xbox360知乎 编辑:程序博客网 时间:2024/05/27 12:21

      导语:学php时间不长,半年多,对foreach这个东西都是做的时候很懵,但是有人帮忙给写出来代码就大彻大悟了,哇原来这么简单。结果下一次还是同样的懵逼。现在详细的解答一下foreach  其中会将各种dump的东西贴出来,附带最详细的解析,也会用到百度的些许资料。


一、对于初学者(学了两三个月不到的),你们首先会想到遍历就是for

      可能你们用for用的津津乐道,不过很现实的告诉你们,看到这篇文章的萌新们一定要立刻将所有for遍历换成foreach (如果你们代码里for遍历有特殊作用那当我们说),努力接受foreach的思想,即使你在使用过程中很不爽,对于$K和$v处于懵逼状态,也要一遍一遍打印数据使用。

二、正式介绍

foreach格式;

/*

@param $array 数组   一般都是二维数组用foreach   一维数组要获取属性直接调用就行 例如: $arr_one=array() 这个是一维数组,里面有age的字段 获取age的值就是 $arr_one['age']   用foreach反倒是大材小用

*/

①foreach($array as $v){

//该种书写方式用的较少,主推第二种

}

②foreach($array as $k=>$v){

(一般都是这种方式,接下来开始超详细解答)

}

很多萌新小同志看见这种格式会突然发懵  $k是什么我也没设置,$v又是什么我也没设置 怎么就出来这两个东西了呢,$k和$v这两个变量是默认这么写的,$k=key(英文名 键名)

$v=value( 翻译为  键值)   你写foreach($array as $key=>$value){}也没人管,只要格式对就行,你起什么名字无所谓的,不过奉劝还是按照格式走,你其他的同事一看就知道是什么,为了你同事着想。


--------------------------------------------------------接下来的解答$array都是二维数组------------------------------------------------------------------------------

开始举例:

这是我数据库里面的数据,我用sql语句查询这个表里的全部东西用的tp框架,有萌新看不懂的先不用管,这个$data代表的就是查询出来的第一张截图的所有的结果,dump一下给你们看看内容

dump打印出来以后就是所有的东西,亮点来了,如果把这个数组$data遍历的话,用foreach($data as $k=>$v){}

那么$k的值就是【0】【1】【2】【3】。没错$k里面是四个值,并不是一个,$v的值也是四个,每一个$v的值就是绿框的,每一个$v是一个一维数组,这个概念一定要弄清楚,$k和$v虽然是个变量值,但是是数组

这个$data就相当于是个索引数组 0(第一组数据的键名)指向一个值(别管这个值是数组还是什么,就在概念上是个值) 1指向一个值  以此类推。。。

对此还感到迷惑的同学 自己写个索引数组或者关联数组 自己测试一下,看看自己打印的数据就知道是什么情况了。别认为难就一直觉得难潜意识的不想去接触foreach($data as $k=>$v){}  

那么要获取id的值怎么获取,最基本的方法$v[''id']  因为$v是一维数组,获取一维数组里面的值就用正常的方法就好了不过要获取的话一定要加上$k因为你直接获取是获取不到的,$data毕竟是个二维数组  $data[$k][$v] 至于$k看你要获取哪个的值了  

如果要遍历出来,就是 foreach($data as $k=>$v){  echo $k.'------>'$v     }自己尝试一下

  如果你想给这个二维数组在每个$k里加个字段 比如说要给每个都加上个age=10  就假设都是十岁     那么就是这么写foreach($data as $k=>$v){    $data[$k]['age']='10'  }

大括号里面的格式 基本为  $data[0][age]=10;  $data[1][age]=10;  $data[2][age]=10;................................

三、某些特殊却实用的遍历介绍

① 批量删除

    一般都是后台批量删除,比如说批量删除商品,订单,这种都是用ajax写,ajax我就不介绍了,前端代码我也不介绍了(前台传批量删除的数据百度有的是)   我只说后台处理方法

    设一个变量  $arrs=array()  设它为一个数组,传到后台是个二维数组,arrs表示是批量删除 ,就这么命名了

  foreach($arrs   as $k=>$v){  

       delete from 表 where  id=$v['id'];  (提问:为什么你$v里面有id字段,因为批量删除的数据从前台传进来必然会有个id字段,99.9%有,所以我就写了个id )

   }

(给ajax返回的东西我就不写了啊,可以让一个变量等于这个结果,然后返回这个变量,也可以结合具体情况操作,主要讲foreach)

这就能把传进来的数据都删除了  

② 将传进来的数据键值键名转换

看到标题不要懵,看图

做了个在线考试系统,后台设置三种类型题(单选多选判断)的的考题数量和分数,如何将其传进数据库,贴完整代码



因为数量和分数就两个字段,也不可能给三种类型的题的分数和数量都各自写相应字段吧,显得你多没水平

当你提交到后台以后,$_POST的数据是这样的如果这种格式是不是你处理数据会很头大,不知道该怎么做,对不对!

但是当你静下心来,看这个打印出来的数据你会发现,索引为0的是单选题的相关配置,索引1的是多选题,索引2的是判断题,那么现在就要用神奇的foreach来进行改变,

嵌套一个foreach     $_POST的  $val因为也是一个二维数组,所以也符合遍历的条件,所以就继续遍历, $tempArr是自己新定义的    最关键的 是将键名键值转换过来,嵌套遍历的时候不要将$k和$v写成一样的!!!

内层的遍历第一次就是  $tempArr[0][tixingid]=$_POST['tixingid']['1'] 以此类推,感觉乱的小伙伴拿张纸心平气和的写一下 慢慢就发现规律了,现在打印一下$tempArr  

是不是变成了我们想要的格式,接下来就遍历$tempArr往数据库里传值就好了,不会的看①的删除方法,照搬照抄


暂时就更到这里,有些墨迹了,不过基本foreach关键的东西都给你们一一写了出来,有什么问题的话评论我,觉得写的很好的也给我赞一下谢谢,让我知道我辛苦手打的字也有人看。如果后续想起来了什么新的foreach我会及时补上,如果看这篇的是萌新们,那么切记学一敲三,自己不动手敲根本不知道代码的神奇!!

            忠言:希望你们能坚持下去走技术的路,无论人在哪里,永远都是靠技术吃饭,另外如果有大牛有幸看到这篇觉得我还勉强凑合希望能带一带。。。。。。




原创粉丝点击