php中foreach()的用法
foreach()有兩種用法:
1:
| 代碼如下 |
複製代碼 |
foreach(array_name as $value) { statement; } |
這裡的array_name是你要遍曆的數組名,每次迴圈中,array_name數組的當前元素的值被賦給$value,並且數組內部的下標向下移一步,也就是下次迴圈回得到下一個元素。
2:
| 代碼如下 |
複製代碼 |
foreach(array_name as $key => $value) { statement; } |
這裡跟第一種方法的區別就是多了個$key,也就是除了把當前元素的值賦給$value外,當前元素的索引值也會在每次迴圈中被賦給變數$key。索引值可以是下標值,也可以是字串。比如book[0]=1中的“0”,book[id]="001"中的“id”.
看下面的例子:
| 代碼如下 |
複製代碼 |
$arr = array( array('id' => 1, 'name' => 'name1'), array('id' => 2, 'name' => 'name2'), ); foreach ($arr as $obj) { $obj['id'] = $obj['id']; $obj['name'] = $obj['name'] . '-modify'; } print_r($arr); //輸出的結果 Array( [0] => Array ( [id] => 1 [name] => name1 ) [1] => Array( [id] => 2 [name] => name2 ) ) |
觀察可以發現在foreach迴圈中對$arr操作並沒有影響到$arr的元素,所以這裡的賦值是傳值而不是傳引用。那如果需要修改$arr中元素的值該怎麼辦呢?可以在變數前面加一個”&”符號,例如:
| 代碼如下 |
複製代碼 |
foreach ($arr as &$obj) { $obj['id'] = $obj['id']; $obj['name'] = $obj['name'] . '-modify'; } |
再看另外一個例子,array裡面存放的是object,
| 代碼如下 |
複製代碼 |
$arr = array( (object)(array('id' => 1, 'name' => 'name1')), (object)(array('id' => 2, 'name' => 'name2')), ); foreach ($arr as $obj) { $obj->name = $obj->name . '-modify'; } print_r($arr); //輸出的結果 Array ( [0] => stdClass Object ( [id] => 1 [name] => name1-modify ) [1] => stdClass Object ( [id] => 2 [name] => name2-modify ) ) |
此時可以看到原始數組中的object對象已經修改了,所以這裡的賦值又是傳引用而不是傳值
綜合上述,得出的結論:如果數組裡面存放的是普通類型的元素就是採用傳值的方式,存放物件類型元素採用的方式為傳地址。