PHP foreach()
语法格式
-
只要键值
foreach( $数组名 as $自定义键值名){
#代码块部分数组有多少个元素便执行几次}
$arr = ["姚明","路飞","黄家驹"];
foreach($arr as $value){
echo $value; //依次打印出$arr的键值
}
-
要键名又要键值
foreach( $数组名 as $自定义键名 => $自定义键值){
#代码块部分数组有多少个元素便执行几次}
$arr = ["姚明","路飞","黄家驹"];
foreach($arr as $key => $value){
echo "键名",$key,"<br>";
echo "键值",$value,"<br>";
}
- 可以通过:(冒号)和endforeach代替 {}
$arr = ["姚明","路飞","黄家驹"];
foreach($arr as $key => $value):
echo "键名",$key,"<br>";
echo "键值",$value,"<br>";
endforeach;
PHP7.0.x下foreach新特性
- **foreach不在改变内部数组指针。**在PHP7之前,当数组通过foreach迭代时,数组指针会移动。7.0之后不再如此
<?php
$array = [0, 1, 2];
foreach ($array as &$val) {
var_dump(current($array));
}
?>
//PHP5
int(1)
int(2)
bool(false)
//PHP7
int(0)
int(0)
int(0)
-
foreach通过值遍历时,操作的值为数组的副本。
- 在PHP7.0.x,当默认使用通过值遍历数组时,foreach实际操作的是数组的迭代副本,而非数组本身。这就意味着,foreach 中的操作不会修改原数组的值。
-
foreach通过引用遍历时,有更好的迭代特性
- 当使用引用遍历数组时,现在 foreach在迭代中能更好的跟踪变化。
<?php
$array = [0];
//通过给形参数组值加&引用实际数组值做到实时读写
foreach ($array as &$val) {
var_dump($val);
$array[1] = 1;
}
?>
//php5
int(0)
//php7
int(0)
int(1)