概述
PHP中foreach主要是循环语法,类似于for语法,但是区别也很大
1、首先我们定义两个测试数组
第一个是水果的信息数组,第二个是学生成绩的数组
$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、显示二维数组的内容信息(水果数据为例)
foreach($fruitArray
as $fruit ){
print_r("水果:".$fruit['name'].",重量:".$fruit['weight'].",价格:".$fruit['price']."<br>");
}
效果如下:
这里很简单,就是一个循环读取数组中的数据,那么如果要按照水果价格降序来打印呢?
3、二维数组排序后显示
一维数组排序,PHP自身就提供了很多函数,比如sort,rsort,ksort…这些查手册文档都有,
这里我们要说的是对二维数组的排序,也就是自定义排序usort
//自定义排序函数
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、根据页面表格整理二维数组内容(以学生成绩为例)
例如上面的学生成绩我们在页面需要显示出如下效果
就需要对数组进行归类处理,需要的数组应该就是
Array
(
[Tom] => Array
(
[语文] => 57
[数学] => 87
[英语] => 94
)
[Jim] => Array
(
[语文] => 23
[数学] => 56
[英语] => 77
)
[Lucy] => Array
(
[语文] => 68
[数学] => 79
[英语] => 89
)
)
那么我们就需要先定义一个空数组,然后以学生姓名为二维数组的第一维键,以学科名称为二维数组的第二维键,成绩作为二维数组的值,理解思路了,实现代码如下:
$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点一样新建一个数组有麻烦,还要先把数据拷贝过来再计算打折后价格,补到新建的数组中,这里我们直接用指针&,可以方便快速的实现我们想要的结果。
foreach($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中其实并没有啊,那我们可以测试下
function 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统计每位学生的总成绩
也就是和上面的打折一个思路,代码如下
$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的基础上编写代码
$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 foreach对二维数组的灵活使用教学大全PHP中foreach主要是循环语法,类似于for语法,但是区别也很大所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复