php foreach详解,php foreach的用法详解,foreach怎么使用

php foreach的用法详解详细解释了PHP foreach的用法,php foreach的用法:1。通过语法“foreach(array _ expression as $ value)”使用它;2.采用语法“foreach(array _ expression as $ key=$ value)”。

95f72955c26b541b1b8a56ce74bc3f70.png

推荐:《PHP视频教程》

PHP中foreach的用法及实例

PHP中经常使用Foreach,如果使用foreach,就必须使用数组。因此,在本文中,我们将讨论数组和foreach。

Foreach有两种语法:

首先是遍历给定的array语句array_expression数组。在每个循环中,当前单元格的值被赋给$value,数组内部的指针向前移动一步(因此在下一个循环中将获得下一个单元格)。

foreach(array _ expression as $ value)第二个同上,当前单元的键名也会在每个循环中赋给变量$key。

foreach(array _ expression as $ key=$ value)我们来一个一个解释!

1.一维普通数组和foreach

我们先写一个一维数组,如下:

$a=array(‘Tom ‘,’ Mary ‘,’ Peter ‘,’ Jack ‘);1.我们使用第一个foreach方法来输出。

foreach ($a as $value) {

echo $值。br/’;

}最终结果是:

汤姆

玛丽

彼得

Jack2,我们用第二个foreach方法输出。

foreach ($a as $key=$value) {

echo $key。’。$value。br/’;

}最终结果是:

0,汤姆

1、玛丽

2,彼得

3.杰克总结道:很明显,我们看到多了一个$key,这个$key的值就是序列号1,2,3,4等等!

第二,一维关联数组和foreach

一维关联数组如下:

$b=数组(‘ a’=’Tom ‘,’ b’=’Mary ‘,’ c’=’Peter ‘,’ d ‘=’ Jack ‘);有些人喜欢这样写,如下:

$b=数组(

a’=’汤姆’,

b’=’玛丽’,

‘ c’=’彼得’,

d’=’杰克’

);1,我们使用第一个foreach方法输出与上面相同的内容。

foreach ($b为$value) {

echo $值。br/’;

}最终结果是:

汤姆

玛丽

彼得

Jack2,我们用第二个foreach方法输出。

foreach ($b as $key=$value) {

echo $key。’。$value。br/’;

}最终结果是:

汤姆

玛丽

彼得

d、Jack Summary:显然,在一维关联数组下,$key是关联的序列号,也就是对应的a、b、c、d。

三维普通数组和foreach

遍历二维数组有点麻烦。为什么?因为遍历的值是数组,既然是数组,就可以对数组进行各种操作!

让我们首先看一个基本的二维数组,如下所示:

$c=数组(

数组(‘ 1 ‘,’ Tom ‘),

数组(‘ 2 ‘,’ Mary ‘),

数组(‘ 3 ‘,’彼得’),

数组(‘ 4 ‘,’插孔’)

);1.我们采用第一种foreach方法:

foreach ($c为$value) {

print _ r($ value);

echo ‘ br/’;

}获得结果:

数组([0]=11 [1]=Tom)

数组([0]=22 [1]=Mary)

数组([0]=33 [1]=彼得)

数组([0]=44 [1]=插孔)2。我们采用第二种方法:

foreach ($c as $key=$value) {

echo“$ key=”。$key。br/’;

print _ r($ value);

echo ‘ br/’;

}获得以下结果:

$key=0

数组([0]=11 [1]=Tom)

$key=1

数组([0]=22 [1]=Mary)

$key=2

数组([0]=33 [1]=彼得)

$key=3

数组([0]=44 [1]=Jack)总结:从上面可以看出,基本的二维数组,$key就是序列号,比如0\1\2\3等等!

4.将2D数组与foreach关联

说明:关联2D阵列在实际项目中可以用得更多。为什么?一般从数据库中提取的数据都是相关的二维数组。学习了二维数组的关联,在PHP的实战中掌握了很大一部分!

然后首先列出相关的二维数组,如下所示:

$d=数组(

数组(‘ id’=’11 ‘,’ name’=’Tom ‘),

数组(‘ id’=’22 ‘,’ name’=’Mary ‘),

数组(‘ id’=’33 ‘,’ name’=’Peter ‘),

数组(‘ 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

数组([id]=11 [name]=Tom)

$key=1

数组([id]=22 [name]=Mary)

$key=2

数组([id]=33 [name]=Peter)

$key=3

数组([id]=44 [name]=Jack)总结:这里,$key还是0/1/2/3。

V.在项目中的实际应用

注意:在项目中,数组有很多变化,当然foreach贡献很大!当然,虽然,各等等也可以用,但是foreach最方便!简单说说实战中常见的一些项目吧!

实战一:把二维联想阵改成一维普通阵

它也是关联二维数组的第四个列表,如下所示:

$d=数组(

数组(‘ id’=’11 ‘,’ name’=’Tom ‘),

数组(‘ id’=’22 ‘,’ name’=’Mary ‘),

数组(‘ id’=’33 ‘,’ name’=’Peter ‘),

数组(‘ id’=’44 ‘,’ name’=’Jack ‘)

);现在我们只需要名称列的内容。当然,我们可以通过以下方式实现。

foreach ($d as $key=$value) {

echo($ value[‘ name ‘]);

echo ‘ br/’;

}但有时我们不得不将其列为一维数组,因此我们有以下方法:

//将名称列作为一维数组获取

$ NameArr=array();//名称列

foreach ($d as $key=$value) {

$ NameArr[]=$ value[‘ name ‘];

{}

print _ r($ NameArr);以上,通过赋一个空数组值,空数组foreach等于我们的值,得到一个新数组!上述代码的结果如下:

排列

(

[0]=汤姆

[1]=玛丽

[2]=彼得

[3]=杰克

这个数组显然是一维普通数组,如下:

$d=array(‘Tom ‘,’ Mary ‘,’ Peter ‘,’ Jack ‘);好了,把二维关联数组改成一维普通数组,写在这里!

实战2:二级分类和无限分类

显然,我们从数据库中得到的数据是二维数组和二维关联数组。那么,我们去掉怎么?的父分类,那么怎么去掉父分类对应的子类呢?

首先需要注意的是,几乎所有的分类都是一个数据库模式,所以我们有必要了解它的结构和怎么检索对应的数据!

为了方便解释,我从网上找了一个比较好的例子,就是“新闻分类”!

好了,我们开门见山吧!先写个数组吧。

//从数据库中检索的分类数据

$ original _ array=array(

数组(‘ id’=1,’ pid’=0,’ name’=’新闻分类’),

数组(‘ id’=2,’ PID’=0,’ name ‘=’最新公告’),

数组(‘ id’=3,’ pid’=1,’ name’=’国内新闻’),

数组(‘ id’=4,’ pid’=1,’ name’=’国际新闻’),

数组(‘ id’=5,’ pid’=0,’ name’=’图片分类’),

数组(‘ id’=6,’ pid’=5,’ name’=’ news picture ‘),

数组(‘ id’=7,’ pid’=5,’ name’=’其他图片’)

);同时,数据库看起来是这样的。

注意:数据库的分类是这样的!拿出阵列也是这样!一般这样!

//从数据库中检索的分类数据

$ original _ array=array(

数组(

id’=1,

pid’=0,

名称’=’新闻分类’

),

数组(

id’=2,

pid’=0,

名称’=’最新公告’

),

数组(

id’=3,

pid’=1,

名称’=’国内新闻’

),

数组(

id’=4,

pid’=1,

名称’=’国际新闻’

),

数组(

id’=5,

pid’=0,

名称’=’图片分类’

),

数组(

id’=6,

pid’=5,

名称’=’新闻图片’

),

数组(

id’=7,

pid’=5,

名称’=’其他图片’

)

);所以,首先,我们需要知道自己想要什么。这个:我们需要知道!(我以前对这个不太了解,我经常使用开源程序,这导致我在怎么没有写这个)

这就是我们想要的最终结果!(我不怕笑话。我找了个朋友帮我解决这个问题!)

//分类数据

$output_array=array(

数组(

id’=1,

pid’=0,

名称=’新闻分类,

children’=array(

数组(

id’=3,

pid’=1,

名称=’国内新闻’

),

数组(

id’=4,

pid’=1,

名称=’国际新闻’

),

),

),

数组(

id’=2,

pid’=0,

名称=’最新公告,

),

数组(

id’=5,

pid’=0,

名称=’图片分类,

children’=array(

数组(

id’=6,

pid’=5,

名称=’新闻图片’

),

数组(

id’=7,

pid’=5,

名称=’其它图片’

),

),

),

);很明显,这里数组多了一个字段,就是孩子们!

那么,怎么从$original_array变为$output_array呢?这里有我一个朋友做的函数,当然也用到foreach!

函数如下:

//整理函数

/**

*生成无限级树算法

* @作者白宇2014-04-01

* @param数组$arr输入数组

* @param number $pid根级的pid

* @param string $column_name列名,id|pid父编号的名字|儿童子数组的键名

* @ ret数组$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 [$pidname]==$pid) {

$ tmp=$ arr[$ k];

unset($ arr[$ k]);

$tmp [$cldname]=make_tree($arr,$v [$idname],$ column _ name);

$ ret[]=$ tmp;

{}

{}

ret $ ret

{}那们怎么使用呢?

//整理函数的使用

$ output _ array=make _ tree($ original _ array);完整使用方法如下:

$output_array=make_tree($arr,0,’ id|pid|children ‘)函数之后,我们这样调用就得到了一级分类与二级分类!

foreach($ output _ array as $ key=$ value){

回声h2 .$value[‘name’]./H2 ‘;

foreach($ value[‘ children ‘]as $ key=$ value){

echo $value[‘name’].’;

{}结果如下:

附:$output_array这个数组,我们使用print_r,就可以得到如下的结果!

排列

(

[0]=数组

(

[id]=1

[pid]=0

[name]=新闻分类

[子]=数组

(

[0]=数组

(

[id]=3

[pid]=1

[name]=国内新闻

[子]=数组

(

)

)

[1]=数组

(

[id]=4

[pid]=1

[name]=国际新闻

[子]=数组

(

)

)

)

)

[1]=数组

(

[id]=2

[pid]=0

[姓名]=最新公告

[子]=数组

(

)

)

[2]=数组

(

[id]=5

[pid]=0

[name]=图片分类

[子]=数组

(

[0]=数组

(

[id]=6

[pid]=5

[name]=新闻图片

[子]=数组

(

)

)

[1]=数组

(

[id]=7

[pid]=5

[name]=其它图片

[子]=数组

(

)

)

)

)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值