php之foreach遍历数组

foreach

(PHP 4, PHP 5)

The foreach construct provides an easy way to iterate over arrays. foreach works only on arrays and objects, and will issue an error when you try to use it on a variable with a different data type or an uninitialized
variable. There are two syntaxes:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

The first form loops over the array given by array_expression. On each iteration, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next iteration,
you‘ll be looking at the next element).

The second form will additionally assign the current element‘s key to the $key variable on each iteration.

It is possible to customize object iteration.

Note:

When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before
a foreach loop.

As foreach relies on the internal array pointer, changing it within the loop may lead to unexpected behavior.

In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.

<?php

$arr = array(1, 2, 3, 4);

foreach ($arr as &$value) {

$value = $value * 2;

}

// $arr is now array(2, 4, 6, 8)

unset($value); // break the reference with the last element

?>

Referencing $value is only possible if the iterated array can be referenced (i.e. if it is a variable). The following code won‘t work:

<?php

foreach (array(1, 2, 3, 4) as &$value) {

$value = $value * 2;

}

?>

Warning

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().

Note:

foreach does not support the ability to suppress error messages using ‘@‘.

You may have noticed that the following are functionally identical:

<?php

$arr = array("one", "two", "three");

reset($arr);

while (list(, $value) = each($arr)) {

echo "Value: $value<br />\n";

}

foreach ($arr as $value) {

echo "Value: $value<br />\n";

}

?>

The following are also functionally identical:

<?php

$arr = array("one", "two", "three");

reset($arr);

while (list($key, $value) = each($arr)) {

echo "Key: $key; Value: $value<br />\n";

}

foreach ($arr as $key => $value) {

echo "Key: $key; Value: $value<br />\n";

}

?>

Some more examples to demonstrate usage:

<?php

/* foreach example 1: value only */

$a = array(1, 2, 3, 17);

foreach ($a as $v) {

echo "Current value of \$a: $v.\n";

}

/* foreach example 2: value (with its manual access notation printed for illustration) */

$a = array(1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

foreach ($a as $v) {

echo "\$a[$i] => $v.\n";

$i++;

}

/* foreach example 3: key and value */

$a = array(

"one" => 1,

"two" => 2,

"three" => 3,

"seventeen" => 17

);

foreach ($a as $k => $v) {

echo "\$a[$k] => $v.\n";

}

/* foreach example 4: multi-dimensional arrays */

$a = array();

$a[0][0] = "a";

$a[0][1] = "b";

$a[1][0] = "y";

$a[1][1] = "z";

foreach ($a as $v1) {

foreach ($v1 as $v2) {

echo "$v2\n";

}

}

/* foreach example 5: dynamic arrays */

foreach (array(1, 2, 3, 4, 5) as $v) {

echo "$v\n";

}

?>

Unpacking nested arrays with list()

(PHP 5 >= 5.5.0)

PHP 5.5 added the ability to iterate over an array of arrays and unpack the nested array into loop variables by providing a list() as
the value.

For example:

<?php

$array = [

[1, 2],

[3, 4],

];

foreach ($array as list($a, $b)) {

// $a contains the first element of the nested array,

// and $b contains the second element.

echo "A: $a; B: $b\n";

}

?>

The above example will output:

A: 1; B: 2
A: 3; B: 4

You can provide fewer elements in the list() than
there are in the nested array, in which case the leftover array values will be ignored:

<?php

$array = [

[1, 2],

[3, 4],

];

foreach ($array as list($a)) {

// Note that there is no $b here.

echo "$a\n";

}

?>

The above example will output:

1
3

A notice will be generated if there aren‘t enough array elements to fill the list():

<?php

$array = [

[1, 2],

[3, 4],

];

foreach ($array as list($a, $b, $c)) {

echo "A: $a; B: $b; C: $c\n";

}

?>

The above example will output:

Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C: 

Notice: Undefined offset: 2 in example.php on line 7
A: 3; B: 4; C: 

php之foreach遍历数组

时间: 2024-10-13 13:42:26

php之foreach遍历数组的相关文章

【JAVA】for,foreach遍历数组时候一些区别

public class ArrayTest { static public void incr(int a[]) { for (Integer i : a) { i += 1; } } static public void incr1(int a[]) { for (int i = 0, len = a.length; i < len; i++) { // a[i] = a[i] + 1; a[i]++; } } static public void main(String args[]) {

foreach遍历数组、数组的转置与方阵的迹

1 public class Copy1 { 2 3 public static void main(String[] args) { 4 array1(); //如果不初始化元素,默认为0 5 int [][] a = new int [][]{{1,3,2,5,7},{5,9,3,4,2}}; 6 int [][] b = new int [a[1].length][a.length]; 7 for(int i=0;i<b.length;i++){ //数组的转置 8 for(int j =

Smarty模板技术之foreach遍历数组实例全面讲解

一.item属性用法 <?php $arr = array(600, 851, 7412); $smarty->assign('testarrg', $arr); ?> 用Smarty中的foreach方法来遍历并输出这个数组 <dl> <dt>foreach中item属性用法</dt> {foreach from=$testarrg item=test} <dd>{$test}</dd> {/foreach} </dl&

PHP中数组的foreach遍历顺序跟键值的关系

近两天,在做一个项目,遇到一个该用数据存储ID做键值还是用数据排序SORT_NO做数组键值的问题,考虑到如果使用数据存储ID作为键值放入数组遍历数组时会不会影响排序的问题,经过查询与验证,得到答案:foreach遍历数组的顺序是按照值存入数组的先后顺序进行遍历的,此为线性遍历,不受数组键值的大小顺序影响. 下面写个简单的例子描述一下问题: 数据库存储user:   自增ID 排序号SORT_NO 值VALUE 1 3 张三 2 2 李四 3 1 王五 通过sql语句:“select ID,SOR

原生js使用forEach()与jquery使用each遍历数组,return false 的区别

原生js使用forEach()与jquery使用each()遍历数组,return false 的区别: 1.使用each()遍历数组a,如下: var a=[20,21,22,23,24]; $.each(a, function(index,val) { console.log('index='+index); if(index==2){ return false; } console.log('val='+val); }); 结果如下: 从运行的效果可以看出,return 相当于循环中的br

JavaScript中遍历数组 最好不要使用 for in 遍历

先看一段代码 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 9 <script> 10 // 一个普通的数组 11 var arr =[3,5,2,6]; 12 // 普通

js中数组遍历for与for in区别(强烈建议不要使用for in遍历数组)

转自: http://www.cnblogs.com/javaee6/p/4142270.html?utm_source=tuicool&utm_medium=referral js中遍历数组的有两种方式 1 2 3 4 5 6 7 8 9 var array=['a'] //标准的for循环 for(var i=1;i<array.length;i++){     alert(array[i]) } //foreach循环 for(var i in array){     alert(ar

实例37foreach遍历数组

package test; import java.util.List; import java.util.ArrayList; import java.util.Scanner; /** * @author 年浩 * */ public class test { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); Li

php 中遍历数组时使用引用出现的问题

今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('id' => 101, 'error'=> 'bb'), ); foreach($arr as &$value) { if($value['id'] == 101) $value['error'] = 'test'; } var_dump($arr); foreach($arr as $va