php引用foreach
⑴ php中foreach循環中使用引用要注意的地方
復制代碼
代碼如下:
foreach
($array
as
&$row)
{
$row
=
explode('/',
$row);
}
foreach
($array
as
$row)
{
//do
something
}
這么寫,在第二個循環會出邏輯錯誤,加入第二個循環中do
something的地方是輸出$row,循環到最後一個的時候的輸出是倒數第二個元素,而不是最後一個
要這么寫
復制代碼
代碼如下:
foreach
($array
as
&$row)
{
$row
=
explode('/',
$row);
}
unset($row);
foreach
($array
as
$row)
{
//do
something
}
或者第一個循環這么寫
復制代碼
代碼如下:
foreach
($array
as
$key
=>
$row)
{
$array[$key]
=
explode('/',
$row);
}
說一下原理
第一個循環使用了引用,循環結束後,$row引用的是$array數組的最後一個元素,當開始第二個循環的時候,$row變數每次循環都會被賦一個新值,在php中,如果一個內存空間是被引用的,那麼當改變它的時候是直接改變這塊內存空間的值,也就是說,當第二個foreach的第一次循環,$array的最後一個元素的值就被改變為$array的第一個元素的值,第二次循環的時候,改變為第二個元素的值,倒數第二次循環的時候,被改變為倒數第二個元素值,而最後一次循環的時候得道的值必然是那個倒數第二個值
當然,如果php的for循環有作用域的話,也不會出現此問題.....
⑵ PHP中的函數-- foreach()的用法詳解
PHP
4
引入了
foreach
結構,和
Perl
以及其他語言很像。這只是一種遍歷數組簡便方法。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
$arr
=
array(1,
2,
3,
4);
foreach
($arr
as
&$value)
{
$value
=
$value
*
2;
}
//
$arr
is
now
array(2,
4,
6,
8)
?>
此方法僅在被遍歷的數組可以被引用時才可用(例如是個變數)。
復制代碼
代碼如下:
<?php
foreach
(array(1,
2,
3,
4)
as
&$value)
{
$value
=
$value
*
2;
}
?>
⑶ php中foreach循環語句 如何使用
$conn=mysql_connect("localhost","root","");
mysql_select_db("test");
mysql_query("set names utf8",$conn);
$result=mysql_query("select * from tb_messages");
$result=mysql_query($sql_excel);
while($arr = mysql_fetch_assoc($result)){
$content[]=$arr;
}
$table = '<table>';
$table .= '<thead><tr><th>id</th><th>標題</th><th>電話</th><th>地址</th><th>審核狀態</th><th>內容</th><th>留言時間</th></thead>';
$table .= '<tbody>';
foreach($content as $key=>$value){
$table .= "<tr>";
$table .= "<td>".$value['id'].'</td>';
$table .= "<td>".$value['title'].'</td>';
$table .= "<td>".$value['phone'].'</td>';
$table .= "<td>".$value['address'].'</td>';
$table .= "<td>".$value['ischeck'].'</td>';
$table .= "<td>".$value['content'].'</td>';
$table .= "<td>".substr($value['datetime'],0,11).'</td>';
$table .= '</tr>';
}
$table .= '</tbody>';
$table .= '</table>';
echo $table;
⑷ PHP中的foreach
我覺得你思路上是不是有點錯誤在==6時不是停止遍歷,而是跳過因為循環一停止就是整個的停止,再開始就是根據條件再次開始了。。。
⑸ php 怎麼調用foreach
foreach 是php里用來遍歷數組用的
具體用法下
//普通數組
$arr=array(1,2,3,4,5);
foreach($arras$v){
echo$v." ";
}
//鍵值數組
$arr2=array(
"a"=>1,
"b"=>2,
"c"=>3,
);
foreach($arr2as$k=>$v){
echo$k."==".$v." ";
}
執行結果: