foreach(循环数组)
第一种:
foreach(数组 as $value){
statement
}
遍历给定的数组,每次循环中,当前单元的值被赋给value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一单元)注:value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一单元)
注:value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一单元)注:value中的value可以自己定义名称,什么都可以($k也可以)
第二种
foreach(数组 as $key => $value){
statement
}
做同样的事,只除了当前单元的键名也会在每次循环中被赋予给变量$key
$arr5 = array(5=>'apple',6=>'orange',50,11=>50.8);//键=>值,在数组中,键不相同的,值可以相同
//遍历数组,就是把每个数输出出来
foreach ($arr5 as $v) {
echo $v."<br>";
}
输出结果:apple
orange
50
50.8
首先它把apple给了v,执行完这步,指针将往后移一个,orange的值给了v,执行完这步,指针将往后移一个,orange的值给了v,执行完这步,指针将往后移一个,orange的值给了v,以此类推。直到把所有元素遍历完,循环结束。
$arr5 = array(5=>'apple',6=>'orange',50,11=>50.8);//键=>值,在数组中,键不相同的,值可以相同
foreach ($arr5 as $k=>$v) {
echo $v."<br>";
}
输出结果:apple
orange
50
50.8
键给k,值给k,值给k,值给v,输出的是v,与v,与v,与k无关以此类推
关联数组中使用foreach
$arr =array(); //创建一个空数组
$arr['张三'] = 50;
$arr['李四'] = 80;
$arr['赵六'] = 70;
$arr[5] = 'apple';
$arr[] = 'orange';
foreach($arr as $key => $v){
echo $v."<br>";
}
输出结果:50
80
70
apple
orange
我们也可以输出$k
输出结果:张三
李四
赵六
5
6
我们输出更难得结果
foreach($arr as $key => $v){
echo $key. '=>' .$v .'<br>';
}
输出结果:张三=>50
李四=>80
赵六=>70
5=>apple
6=>p=orange
另一个例子
//最笨的方法
$arr = array('张三'=>50,'赵六'=>'60','孙七'=>45);
//给每个元素提分,+10
$arr['张三'] += 10;
$arr['赵六'] += 10;
$arr['孙七'] += 10;
print_r($arr);
输出结果: Array(‘张三’=>60,‘赵六’=>70,‘孙七’=>55)
如果人太多,用这种方法太麻烦了,我们采用foreach
foreach ($arr as $key => $value) {
$value = $value+10;
}
输出结果: Array(‘张三’=>50,‘赵六’=>‘60’,‘孙七’=>45)
没有变化,因为遍历时使用的值赋值,可以采用引用赋值
注:如果我们想改变上边的值时必须加&符号
foreach ($arr as &$value) {
$value+=10;
除了引用赋值,我们还可以采用别的方法,我们可以借助键。
foreach ($arr as $key => $value) {
$arr[$key] += 10;
输出结果: Array(‘张三’=>60,‘赵六’=>70,‘孙七’=>55)
注:通过访问张三的成绩时,我们+10
unset($value);//取消引用
print_r($arr);