什麼是foreach遍歷陣列?
我們在使用foreach遍歷陣列時,常常會因為概念不清而出錯,以下簡單介紹一下常用的foreach運算。
(PHP 4, PHP 5, PHP 7)
foreach 語法結構提供了遍歷陣列的簡單方式。 foreach 僅能夠應用於數組和對象,如果嘗試應用於其他資料類型的變量,或未初始化的變數將發出錯誤訊息。
foreach遍歷陣列兩種語法:
foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
第一種格式遍歷給定的 array_expression 陣列。 每次循環中,當前單元的值被賦給 $value 並且數組內部的指標向前移一步(因此下一次循環中將會得到下一個單元)。
第二種格式做同樣的事,只除了目前單元的鍵名也會在每次循環中被賦給變數 $key。
自PHP 5 起,還可能遍歷物件。
注意:當 foreach 開始執行時,陣列內部的指標會自動指向第一個單元。這意味著不需要在 foreach 迴圈之前呼叫 reset()。
注意:除非陣列是被引用,foreach 所操作的是指定陣列的拷貝,而不是該陣列本身。 foreach對陣列指標有些副作用。除非對其重置,在 foreach 循環中或循環後都不要依賴數組指標的值。
自 PHP 5 起,可以輕鬆地透過在 $value 之前加上 & 來修改陣列的元素。此方法將以引用賦值而不是拷貝一個值。
<?php header("Content-Type:text/html; charset=utf-8"); $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6, 8) unset($value); // 最后取消掉引用 ?>
$value 的引用只有在被遍歷的陣列可以被引用時才可用(例如是個變數)。下列程式碼則無法運作:
<?php foreach (array(1, 2, 3, 4) as &$value) { $value = $value * 2; } ?>
注意:陣列最後一個元素的 $value 引用在 foreach 迴圈之後仍會保留。建議使用 unset() 來銷毀。 foreach 不支援用「@」來抑制錯誤訊息的能力。
下面是php foreach遍歷數組的實例
1.要遍歷的陣列是一維數組,比較簡單。若是單一數組,用兩種方法分別表示,如下:
<?php header("Content-Type:text/html; charset=utf-8"); $array = array("PHP中文网","百度","搜狗","www.php.cn"); foreach ($array as $value){ echo $value."<br>"; } echo "<br>"; foreach ($array as $key =>$value){ echo $key."--".$value."<br>"; } ?>
輸出結果為:
2.若是一維關聯數組,顯示如下, 注意key的值是不同的:
<?php header("Content-Type:text/html; charset=utf-8"); $array = array("网站1"=>"PHP中文网","网站2"=>"百度","网站3"=>"搜狗","网址"=>"www.php.cn"); foreach ($array as $value){ echo $value."<br>"; } echo "<br>"; foreach ($array as $key =>$value){ echo $key."--".$value."<br>"; } ?>
遍歷結果為:
3.遍歷二維陣列時,稍微麻煩一點,此時的value值是一個數組,由此可以衍生出多種操作數組的方法。下面先遍歷一下,基本的二維數組:
<?php header("Content-Type:text/html; charset=utf-8"); $array = array( array("1","PHP中文网"), array("2","www.php.cn"), array("3","百度"), array("4","搜狗") ); foreach ($array as $value){ print_r($value); echo "<br>"; } ?>
遍歷結果如下:
採用第二種方法,遍歷數組時,要注意key的取值,不要和數組id值弄混;
<?php header("Content-Type:text/html; charset=utf-8"); $array = array( array("1","PHP中文网"), array("2","www.php.cn"), array("3","百度"), array("4","搜狗") ); foreach ($array as $key =>$value){ echo "key =".$key."<br>"; print_r($value); echo "<br>"; } ?>
遍歷結果如下:
此外,經常會出現要求將二維數組某一列變為一維數組,此時要將value中對應的字段取出,放在一維數組中,若是用for循環操作,比較繁瑣,用foreach較為簡單,如下,獲取當前數組的id列,和name列,分別存放在一維數組中:
<?php header("Content-Type:text/html; charset=utf-8"); $array = array( array("id"=>"1","name"=>"PHP中文网"), array("id"=>"2","name"=>"www.php.cn"), array("id"=>"3","name"=>"百度"), array("id"=>"4","name"=>"搜狗") ); //二维数组定义 //获取某一列作为一维数组 $idArr = array();//id列 $nameARR = array();//name列 foreach($array as $key => $value){ $arr = $value["id"]; $idArr =$arr; //存入ID列 $name = $value["name"]; $nameARR = $name; //存入name列 print_r($idArr); print_r($nameARR); } ?>
遍歷結果為:
【相關教學推薦】
1. 相關專題推薦:《php陣列(Array)》
2. 相關影片課程推薦: 《#用foreach迴圈來遍歷:索引與關聯數組》
以上是php數組中foreach遍歷數組的使用實例詳解(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!