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',
)
}