PHP foreach对二维数组的灵活使用教学大全

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;

效果如下:
在这里插入图片描述
全是个人理解所写,如有疑问,欢迎交流

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑白码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值