php之foreach遍历数组
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<br>
$arr = array(1, 2, 3, 4);<br>
foreach ($arr as &$value) {<br>
$value = $value * 2;<br>
}<br>
// $arr is now array(2, 4, 6, 8)<br>
unset($value); // break the reference with the last element<br>
?>
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<br>
foreach (array(1, 2, 3, 4) as &$value) {<br>
$value = $value * 2;<br>
}<br>
?>
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<br>
$arr = array("one", "two", "three");<br>
reset($arr);<br>
while (list(, $value) = each($arr)) {<br>
echo "Value: $value<br />\n";<br>
}<br>
<br>
foreach ($arr as $value) {<br>
echo "Value: $value<br />\n";<br>
}<br>
?>
The following are also functionally identical:
<?php<br>
$arr = array("one", "two", "three");<br>
reset($arr);<br>
while (list($key, $value) = each($arr)) {<br>
echo "Key: $key; Value: $value<br />\n";<br>
}<br>
<br>
foreach ($arr as $key => $value) {<br>
echo "Key: $key; Value: $value<br />\n";<br>
}<br>
?>
Some more examples to demonstrate usage:
<?php<br>
/* foreach example 1: value only */<br>
<br>
$a = array(1, 2, 3, 17);<br>
<br>
foreach ($a as $v) {<br>
echo "Current value of \$a: $v.\n";<br>
}<br>
<br>
/* foreach example 2: value (with its manual access notation printed for illustration) */<br>
<br>
$a = array(1, 2, 3, 17);<br>
<br>
$i = 0; /* for illustrative purposes only */<br>
<br>
foreach ($a as $v) {<br>
echo "\$a[$i] => $v.\n";<br>
$i++;<br>
}<br>
<br>
/* foreach example 3: key and value */<br>
<br>
$a = array(<br>
"one" => 1,<br>
"two" => 2,<br>
"three" => 3,<br>
"seventeen" => 17<br>
);<br>
<br>
foreach ($a as $k => $v) {<br>
echo "\$a[$k] => $v.\n";<br>
}<br>
<br>
/* foreach example 4: multi-dimensional arrays */<br>
$a = array();<br>
$a[0][0] = "a";<br>
$a[0][1] = "b";<br>
$a[1][0] = "y";<br>
$a[1][1] = "z";<br>
<br>
foreach ($a as $v1) {<br>
foreach ($v1 as $v2) {<br>
echo "$v2\n";<br>
}<br>
}<br>
<br>
/* foreach example 5: dynamic arrays */<br>
<br>
foreach (array(1, 2, 3, 4, 5) as $v) {<br>
echo "$v\n";<br>
}<br>
?>
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<br>
$array = [<br>
[1, 2],<br>
[3, 4],<br>
];<br>
<br>
foreach ($array as list($a, $b)) {<br>
// $a contains the first element of the nested array,<br>
// and $b contains the second element.<br>
echo "A: $a; B: $b\n";<br>
}<br>
?>
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<br>
$array = [<br>
[1, 2],<br>
[3, 4],<br>
];<br>
<br>
foreach ($array as list($a)) {<br>
// Note that there is no $b here.<br>
echo "$a\n";<br>
}<br>
?>
The above example will output:
1 3
A notice will be generated if there aren't enough array elements to fill the list():
<?php<br>
$array = [<br>
[1, 2],<br>
[3, 4],<br>
];<br>
<br>
foreach ($array as list($a, $b, $c)) {<br>
echo "A: $a; B: $b; C: $c\n";<br>
}<br>
?>
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:

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



The method of using a foreach loop to remove duplicate elements from a PHP array is as follows: traverse the array, and if the element already exists and the current position is not the first occurrence, delete it. For example, if there are duplicate records in the database query results, you can use this method to remove them and obtain results without duplicate records.

Methods for deep copying arrays in PHP include: JSON encoding and decoding using json_decode and json_encode. Use array_map and clone to make deep copies of keys and values. Use serialize and unserialize for serialization and deserialization.

The performance comparison of PHP array key value flipping methods shows that the array_flip() function performs better than the for loop in large arrays (more than 1 million elements) and takes less time. The for loop method of manually flipping key values takes a relatively long time.

PHP's array_group_by function can group elements in an array based on keys or closure functions, returning an associative array where the key is the group name and the value is an array of elements belonging to the group.

The best practice for performing an array deep copy in PHP is to use json_decode(json_encode($arr)) to convert the array to a JSON string and then convert it back to an array. Use unserialize(serialize($arr)) to serialize the array to a string and then deserialize it to a new array. Use the RecursiveIteratorIterator to recursively traverse multidimensional arrays.

Multidimensional array sorting can be divided into single column sorting and nested sorting. Single column sorting can use the array_multisort() function to sort by columns; nested sorting requires a recursive function to traverse the array and sort it. Practical cases include sorting by product name and compound sorting by sales volume and price.

The PHP array merging and deduplication algorithm provides a parallel solution, dividing the original array into small blocks for parallel processing, and the main process merges the results of the blocks to deduplicate. Algorithmic steps: Split the original array into equally allocated small blocks. Process each block for deduplication in parallel. Merge block results and deduplicate again.

PHP's array_group() function can be used to group an array by a specified key to find duplicate elements. This function works through the following steps: Use key_callback to specify the grouping key. Optionally use value_callback to determine grouping values. Count grouped elements and identify duplicates. Therefore, the array_group() function is very useful for finding and processing duplicate elements.
