PHP foreach
在本教程中,我们将学习如何使用PHP foreach循环语句来循环数组元素或对象的公共属性。
PHP提供了foreach循环语句来遍历数组的元素或对象的公共属性。
foreach循环语句只对数组和对象有效。如果将foreach循环语句与其他数据类型一起使用,则会报错。
PHP foreach - 循环遍历索引数组的元素
要遍历索引数组的元素,可以使用以下语法:
<?php foreach ($array as $element) { // 在这里处理元素$element }
PHP在每次迭代中将索引数组的每个元素赋给$element变量。
请看下面的例子:
<?php $nums = [95,73,87]; foreach ($nums as $num) { echo $num; }
在本例中,我们将$nums数组的每个元素分配给$num变量,并在每次迭代中显示元素$num的值。
要循环更改数组元素的值,必须使用foreach循环返回的引用。
要使foreach循环返回对数组元素的引用,需要在循环变量前面添加一个&符号,如下所示:
<?php foreach ($array as &$value) { }
下面的例子演示了如何更改一个索引数组的元素的值:
<?php $nums = [1,2,3]; foreach ($nums as &$num) { $num *= $num; } print_r($nums); // [1, 4, 9]
在例子中,我们遍历$nums数组的元素,并将每个元素的值改成其平方。
注意,对foreach循环中使用引用可能会有问题。请看以下示例:
<?php $nums = ['a','b',3]; // 第一个循环 foreach ($nums as &$num) { } // 第二个循环 foreach ($nums as $num) { } print_r($nums);
在第二个循环之后,$nums数组是:
['a','b','b']
原因是在第一个循环之后,$num变量总是引用$nums数组的第三个元素。
在第二个循环中:
在第一次迭代中,我们将$nums数组的第一个元素分配给$num,因为$num地址指向$nums数组的第三个元素,因此,第一次迭代相当于:
$scores[2] = $scores[0];
因此,在第一次迭代之后,$scores数组的内容是:
['a','b','a']
在第二次迭代中,我们将$scores数组的第二个元素分配给$score,并记住$score仍然指向$scores数组的第三个元素,因此,第二次迭代是:
$scores[2] = $scores[1];
所以在第二次迭代之后,$scores数组是:
['a','b','b']
在第三次(最后一次)迭代中,我们将$scores的第三个元素分配给自己:
$scores[2] = $scores[2];
因此,$scores数组的内容是:
['a', 'b' ,'b']
希望这个解释能帮助您理解foreach循环中变量引用可能会导致的问题。
要解决此问题,应始终在循环后使用unset()函数来释放引用变量,如下所示:
foreach ($scores as &$score) { } unset($score);
PHP foreach – 迭代关联数组的元素
要遍历关联数组的元素,可以使用以下语法:
<?php foreach ($array as $key => $value) { // 在这里处理元素的$key 和 $value }
对于数组中的每个元素,元素的键被分配给$key变量,元素的值被分配给$value变量。
让我们看下面的例子:
<?php $name = [ 'one' => 'tom', 'two' => 'Hyman', 'three' => 'ben' ]; foreach ($name as $key => $value) { echo $key . ':' . $value . '<br>'; }
PHP foreach - 遍历对象的公共属性
使用foreach循环遍历对象的公共属性的语法与遍历关联数组的元素相同。
请看下面的例子:
<?php class Person { public $firstName; public $lastName; public $middleName; public function __construct($firstName, $lastName, $middleName) { $this->firstName = $firstName; $this->lastName = $lastName; $this->middleName = $middleName; } } $john = new Person('tom', 'Hyman', 'benny'); foreach ($john as $propName => $propValue) { echo $propName . ': ' . $propValue . '<br>'; }
首先,我们定义了Person类,它有三个公共属性:firstName、lastName和middleName。
其次,我们创建了Person类的新对象$john。
最后,我们使用foreach语句遍历$john对象的公共属性并显示它们的值。