PHP中foreach主要是循环语法,类似于for语法,但是区别也很大
1、首先我们定义两个测试数组
第一个是水果的信息数组,第二个是学生成绩的数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$fruitArray = array( "a" => array("name"=>"苹果","weight"=>"0.8","price"=>"6.8"), "b" => array("name"=>"香蕉","weight"=>"0.3","price"=>"4.8"), "c" => array("name"=>"西瓜","weight"=>"8.9","price"=>"20.8"), "d" => array("name"=>"榴莲","weight"=>"3.9","price"=>"40.5") ); $studentArray = array( array("1","Tom","语文","57"), array("2","Jim","语文","23"), array("3","Lucy","语文","68"), array("4","Tom","数学","87"), array("5","Jim","数学","56"), array("6","Lucy","数学","79"), array("7","Tom","英语","94"), array("8","Jim","英语","77"), array("9","Lucy","英语","89") );
2、显示二维数组的内容信息(水果数据为例)
1
2
3
4
5foreach($fruitArray as $fruit ){ print_r("水果:".$fruit['name'].",重量:".$fruit['weight'].",价格:".$fruit['price']."<br>"); }
效果如下:
这里很简单,就是一个循环读取数组中的数据,那么如果要按照水果价格降序来打印呢?
3、二维数组排序后显示
一维数组排序,PHP自身就提供了很多函数,比如sort,rsort,ksort…这些查手册文档都有,
这里我们要说的是对二维数组的排序,也就是自定义排序usort
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17//自定义排序函数 function fruitPriceDesc( $a, $b ){ $returnFlag = 0; if ($a['price'] == $b['price']){ $returnFlag = 0; }else{ $returnFlag = $a['price'] > $b['price'] ? 1:0; } } //调用自定义排序 usort( 要排序的数组, 自定义比较大小的函数名 ) usort($fruitArray,"fruitPriceDesc"); //打印结果 foreach($fruitArray as $fruit ){ print_r("水果:".$fruit['name'].",重量:".$fruit['weight'].",价格:".$fruit['price']."<br>"); }
效果如下:
4、根据页面表格整理二维数组内容(以学生成绩为例)
例如上面的学生成绩我们在页面需要显示出如下效果
就需要对数组进行归类处理,需要的数组应该就是
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Array ( [Tom] => Array ( [语文] => 57 [数学] => 87 [英语] => 94 ) [Jim] => Array ( [语文] => 23 [数学] => 56 [英语] => 77 ) [Lucy] => Array ( [语文] => 68 [数学] => 79 [英语] => 89 ) )
那么我们就需要先定义一个空数组,然后以学生姓名为二维数组的第一维键,以学科名称为二维数组的第二维键,成绩作为二维数组的值,理解思路了,实现代码如下:
1
2
3
4
5
6$needData = array(); foreach ($studentArray as $item) { $needData[$item[1]][$item[2]] = $item[3]; } //echo "<pre/>";print_r($needData);//加上echo 是为了打印出上面有格式的数组
这样就实现了二维数组转化数组成为我们想要的数据了
5、直接对数组进行指针处理更新或新增数据
5.1新增水果店打折价格
比如水果店打折8.8折,要求显示出原价和打折后价格,这个如果要和第4点一样新建一个数组有麻烦,还要先把数据拷贝过来再计算打折后价格,补到新建的数组中,这里我们直接用指针&,可以方便快速的实现我们想要的结果。
1
2
3
4
5
6foreach($fruitArray as &$fruit ){ $fruit['discountPrice'] = round( $fruit['price']*0.88,2); print_r("水果:".$fruit['name'].",重量:".$fruit['weight'].",原始价格:".$fruit['price'].",打折后价格:".$fruit['discountPrice']."<br>"); }
这里和我们平时直接赋值的区别就是多了一个&符号,类似C语言中的*,可以理解为PHP的指针就是&,
显示的截图:
有同学可能会有疑问了,这里是不是上一行刚刚计算出来的,所以打印能用,$fruitArray中其实并没有啊,那我们可以测试下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19function fruitPriceDesc( $a, $b ){ $returnFlag = 0; if ($a['price'] == $b['price']){ $returnFlag = 0; }else{ $returnFlag = $a['price'] > $b['price'] ? 1:0; } } usort($fruitArray,"fruitPriceDesc"); foreach($fruitArray as &$fruit ){ $fruit['discountPrice'] = round( $fruit['price']*0.88,2); print_r("水果:".$fruit['name'].",重量:".$fruit['weight'].",原始价格:".$fruit['price'].",打折后价格:".$fruit['discountPrice']."<br>"); } foreach($fruitArray as $fruit2 ){ print_r("水果:".$fruit2['name'].",重量:".$fruit2['weight'].",原始价格:".$fruit2['price'].",打折后价格:".$fruit2['discountPrice']."<br>"); }
运行结果:
所以就是保存到了$fruitArray数组中了,
5.2统计每位学生的总成绩
也就是和上面的打折一个思路,代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13$needData = array(); foreach ($studentArray as $item) { $needData[$item[1]][$item[2]] = $item[3]; } foreach ( $needData as $key => &$value ){ $totalScore = 0; foreach ( $value as $subject => $score ) { $totalScore += $score; } $value['总分'] = $totalScore; } echo "<pre/>";print_r($needData);
效果如下:
6、对二维数组键的访问
上面的5.2中,我们是拼接出来了数组,可是要显示在html中要怎么做呢?
这里用PHP直接拼接一个table出来,原生的,在5.2的基础上编写代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19$htmlStr = "<table border='1'>"; foreach ( $needData as $key => $value ){ $htmlStr .= "<tr>"; if ($key == "Tom" ) { $htmlStr .= "<td></td>"; foreach ($value as $subject => $score ){ $htmlStr .= "<td>".$subject."</td>"; } $htmlStr .= "</tr><tr>"; } $htmlStr .= "<td>$key</td>"; foreach ($value as $subject => $score ){ $htmlStr .= "<td>".$score."</td>"; } $htmlStr .= "</tr>"; } $htmlStr .= "</table>"; echo $htmlStr;
效果如下:
全是个人理解所写,如有疑问,欢迎交流
最后
以上就是帅气奇迹最近收集整理的关于PHP foreach对二维数组的灵活使用教学大全PHP中foreach主要是循环语法,类似于for语法,但是区别也很大的全部内容,更多相关PHP内容请搜索靠谱客的其他文章。
发表评论 取消回复