PHP里foreach的使用

1、应用场景

比如:多维数组里,合并名字相同的学生成绩成新数组

$all = array(4){
	[0]=>array(
		name=>'张三',
		goods=>'60',
	),
	[1]=>(
		name=>'张三',
		goods=>'80',
	),
	[2]=>(
		name=>'李四',
		goods=>'80',
	),
	[3]=>(
		name=>'李四',
		goods=>'70',
	)
}

把上面的 $all数组转化为下面的 $bll数组

$bll = array(2){
	[0]=>array(
		name=>'张三',
		goods=>'140',
	),
	[2]=>(
		name=>'李四',
		goods=>'150',
	)
}

2、foreach简介

foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:

foreach (array_expression as $value)

foreach (array_expression as $key => $value)

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key.

当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。由于 foreach 依赖内部数组指针,在循环中修改其值将可能导致意外的行为。

3、实现应用场景的方式

foreach($all as $k=>$v){
        if(!isset($alls[$v['name']])){
		$alls[$v['name']]=$v;
        }else{
		$alls[$v['name']]['goods']+=$v['goods'];
        }
}

此循环结束后获得如下新数组

$alls = array(2){
	[张三]=>array(
		name=>'张三',
		goods=>'140',
	),
	[李四]=>(
		name=>'李四',
		goods=>'150',
	)
}

再使用array_values()去除键名。
array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
提示:被返回的数组将使用数值键,从 0 开始并以 1 递增。

$bll = array_values($alls);

可获得上面提到的数据结构

$bll = array(2){
	[0]=>array(
		name=>'张三',
		goods=>'140',
	),
	[2]=>(
		name=>'李四',
		goods=>'150',
	)
}

猜你喜欢

转载自blog.csdn.net/weixin_43687896/article/details/84063938