php定义二维数组-PHP中foreach的用法看这篇文章就够了

2023-09-02 0 5,421 百度已收录

PHP中经常使用foreach,而要使用foreach就必须使用链表。

foreach 有两种句型:

第一种:遍历给定字段语句array_expression字段。

在每次循环中,当前单元格的值被赋给$value,但链表内的指针向前移动一步(因此下一次循环将获得下一个单元格)。

foreach(数组表达式作为$值)

第二种:同上,每次循环中也会将当前单元的键值赋给变量$key。

foreach(数组表达式为$key=>$value)

1.一维普通链表和foreach

我们首先写一个一维字段,如下:

$a=array('汤姆','玛丽','彼得','杰克');

1.我们使用第一个foreach方法来输出。

foreach($aas$值){

回声$值。”

”;

最终结果是:

汤姆

玛丽

彼得

杰克

2、我们使用第二个foreach方法来输出。

foreach($aas $key=>$value){

echo$key.','.$value."

”;

最终结果是:

0、汤姆

1、玛丽

2、彼得

3、杰克

总结:多了一个$key,这个$key的值为序号1、2、3、4等。

二维、一维关联字段和foreach

一维关联字段如下:

$b=array('a'=>'汤姆','b'=>'玛丽','c'=>'彼得','d'=>'杰克');

有些人喜欢这样写,如下:

$b=数组(

'a'=>'汤姆',

'b'=>'玛丽',

'c'=>'彼得',

'd'=>'杰克'

);

1.我们使用第一个foreach方法,输出与上面相同。

foreach($bas$值){

回声$值。”

”;

最终结果是:

汤姆

玛丽

彼得

杰克

2、我们使用第二个foreach方法来输出。

foreach($bas$key=>$value){

echo$key.','.$value."

”;

最终结果是:

原子

b、玛丽

c、彼得

d、杰克

总结:在一维关联字段下,$key是关联的序号,即对应的a、b、c、d。

3.二维普通链表和foreach

遍历二维字段会麻烦一点,因为遍历的值是一个字段,而既然是链表,就可以对链表进行各种操作。

我们先看一个基本的二维场,如下:

$c=数组(

数组('1','汤姆'),

数组('2','玛丽'),

数组('3','彼得'),

数组('4','杰克')

);

1.我们使用第一个foreach方法来输出。

foreach($cas$值){

print_r($值);

回声”

”;

得到这个结果:

数组([0]=>1[1]=>汤姆)

数组([0]=>2[1]=>玛丽)

数组([0]=>3[1]=>彼得)

数组([0]=>4[1]=>杰克)

2、我们使用第二个foreach方法来输出。

foreach($cas$key=>$value){

回显'$key='.$key。"

”;

print_r($值);

回声”

”;

得到以下结果:

$键=0

数组([0]=>1[1]=>汤姆)

$键=1

数组([0]=>2[1]=>玛丽)

$键=2

数组([0]=>3[1]=>彼得)

$键=3

数组([0]=>4[1]=>杰克)

总结:从上面可以看出php定义二维数组,对于基本的二维字段来说,$key就是序号,比如0123等等。

4.用foreach关联二维字段

说明:关联二维链表在实际项目中使用较多,因为通常从数据库中提取的数据都是与二维字段相关联的。 学会关联二维字段后,在PHP的实战中,已经掌握了很大一部分了。

所以首先列出关联的二维字段,如下:

$d=数组(

array('id'=>'1','name'=>'汤姆'),

array('id'=>'2','name'=>'玛丽'),

array('id'=>'3','name'=>'Peter'),

array('id'=>'4','name'=>'Jack')

);

1.使用第一种方法代码:

foreach($das$值){

print_r($值);

回声”

”;

得到的结果如下:

数组([id]=>1[name]=>汤姆)

数组([id]=>2[name]=>玛丽)

数组([id]=>3[name]=>Peter)

数组([id]=>4[name]=>Jack)

显然,关联和非关联的区别在于:非关联后面是0/1等,而关联则显示具体名称id/name等。

2、使用第二种方法的代码:

foreach($das$key=>$value){

回显'$key='.$key.'

”;

print_r($值);

回声”

”;

得到的结果如下:

$键=0

数组([id]=>1[name]=>汤姆)

$键=1

数组([id]=>2[name]=>玛丽)

$键=2

数组([id]=>3[name]=>Peter)

$键=3

数组([id]=>4[name]=>Jack)

摘要:这里$key仍然是0/1/2/3。

5. 实际应用

说明:项目中php定义二维数组,链表有很多变化。 下面简单说一下一些常见的项目实战吧!

实战1:将二维关联字段改为一维普通链表。

或者关联二维字段的第四个枚举,如下:

$d=数组(

array('id'=>'1','name'=>'汤姆'),

array('id'=>'2','name'=>'玛丽'),

array('id'=>'3','name'=>'Peter'),

array('id'=>'4','name'=>'Jack')

);

我们只需要name的内容,我们可以通过以下方式实现:

foreach($das$key=>$value){

回声($值['名称']);

回声”

”;

有时我们需要将其组织成一维字段,我们可以使用以下方法:

//获取名称列作为一维字段

//名称列

$nameArr=数组();

foreach($das$key=>$value){

$nameArr[]=$value['name'];

print_r($nameArr);

首先通过构造一个空链表,然后将foreach后面的结果参数赋予到空链表中,得到一个新的字段。

上述代码的结果如下:

大批

[0]=>汤姆

[1]=>玛丽

[2]=>彼得

[3]=>杰克

这个字段显然是一个一维的普通链表,如下:

$d=array('汤姆','玛丽','彼得','杰克');

这就是将二维关联字段变成一维普通链表的过程。

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

如果我们从数据库中删除一个二维相关字段,那么如何删除父类别呢?

如何获取父类目对应的子类目?

对于二级分类,一个更容易解释的反例是“新闻分类”。

我们先写一个链表。

//从数据库中取出的分类数据

$original_array=数组(

array('id'=>1,'pid'=>0,'name'=>'新闻类别'),

array('id'=>2,'pid'=>0,'name'=>'最新公告'),

array('id'=>3,'pid'=>1,'name'=>'国外新闻'),

array('id'=>4,'pid'=>1,'name'=>'国际新闻'),

array('id'=>5,'pid'=>0,'name'=>'图片分类'),

array('id'=>6,'pid'=>5,'name'=>'新闻图片'),

array('id'=>7,'pid'=>5,'name'=>'其他图片')

);

同时数据库中的数据表是这样的。

注:数据库的分类是这样的,去掉的字段也是这样的。

//从数据库中取出的分类数据

$original_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,

'名称' => '其他图片'

);

我们想要的最终结果:

//排序后的数据

$输出数组=数组(

大批(

'id'=>1,

'pid'=>0,

'name'=>'新闻类别',

'孩子'=>数组(

大批(

'id'=>3,

'pid'=>1,

'名字' => '外国新闻'

),

大批(

'id'=>4,

'pid'=>1,

'名称' => '国际新闻'

),

),

),

大批(

'id'=>2,

'pid'=>0,

'name'=>'最新公告',

),

大批(

'id'=>5,

'pid'=>0,

'name'=>'图片分类',

'孩子'=>数组(

大批(

'id'=>6,

'pid'=>5,

'姓名' => '新闻图片'

),

大批(

'id'=>7,

'pid'=>5,

'名称'=>'其他图片'

),

),

),

);

可以看到,链表中多了一个数组,就是children。

如何从 $original_array 更改为 $output_array?

函数如下:

//组织函数

/**

* 生成无限层次树算法

*@paramarray$arr 输入字段

* @paramnumber$pid 根级别的pid

*@paramstring$column_name列名,id|parent的pid名称 id child|children的key值 子链表

*@returnarray$ret

*/

functionmake_tree($arr,$pid=0,$column_name='id|pid|children'){

列表($idname,$pidname,$cldname)=explode('|',$column_name);

$ret=数组();

foreach($arras$k=>$v){

if($v[$pidname]==$pid){

$tmp=$arr[$k];

取消设置($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_arrayas $key=>$value){

echo ''.$value['name'].'';

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

echo$value['名称'].',';

结果如下:

对于 $output_array 字段,我们使用 print_r 得到以下结果。

大批

[0]=>数组

[id]=>1

[pid]=>0

[名称]=>新闻分类

[孩子]=>数组

[0]=>数组

[id]=>3

[pid]=>1

[name]=>国外新闻

[孩子]=>数组

[1]=>数组

[id]=>4

[pid]=>1

[名称] => 国际新闻

[孩子]=>数组

[1]=>数组

[id]=>2

[pid]=>0

[名称]=>最新公告

[孩子]=>数组

[2]=>数组

[id]=>5

[pid]=>0

[名称]=>图片分类

[孩子]=>数组

[0]=>数组

[id]=>6

[pid]=>5

[名称]=>新闻图片

[孩子]=>数组

[1]=>数组

[id]=>7

[pid]=>5

[名称]=>其他图片

[孩子]=>数组

就是这样。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php定义二维数组-PHP中foreach的用法看这篇文章就够了 https://www.wkzy.net/game/189062.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务