通常迴圈訪問陣列都用for迴圈
例如:for($i=0;i$i<3;$i++)
echo $arr[$i];
但通過手工**操作乙個大陣列來說,用foreach迴圈的**更少
上面的**可以這樣寫
foreach ($arr as $value)
echo $value;
下面來仔細**下foreach使用中的一些問題
1.foreach 中使用引用的情況。
普通情況下,foreach($arr as $value)中的$arr和$value是拷貝,不受外部影響的,即
$arr = array(0,1,2,3,4,5);
foreach($arr as $value)
結果是:12345
但如果$arr是引用的話,情況則不同了,我們用**來說明問題
$arr = array(0,1,2,3,4,5);
$arr = &$arr;
foreach($arr as $value)
結果是: 0
這是因為迴圈用的$arr是直接指向原資料的,而不是copy了乙份。
如果$value是引用,而$arr不是引用,其結果是一樣的,同樣$value是指向原資料的而不是copy
$arr = array(0,1,2,3,4,5);
foreach($arr as &$value)
結果是: 0
還有一種情況比較特殊,即是如果定義了$arr為全域性變數的話,$arr也會變成引用
global $arr;
$arr = array(0,1,2,3,4,5);
foreach($arr as $value)
結果是: 0
2. 如果兩次迴圈乙個陣列,一定不能這樣寫
foreach($arr as &$value){}
foreach($arr as $value){}
這會導致第二次的迴圈的結果不正確(可能是php的bug吧)。可以用以下幾種來代替:
//solution 1
foreach($arr as &$value){}
unset($value);
foreach($arr as $value){}
//solution 2
foreach($arr as &$value){}
foreach($arr as &$value){}
//solution 3
foreach($arr as &$value){}
$arr2 = $arr;
foreach($arr2 as $value){}
3.防止foreach出現未定義情況,盡量這樣來寫foreach
foreach((array)$arr as $value) {}
使用namespace需要注意的一些東西
使用c 標準庫的任何識別符號,一般來說有三種選擇,但是using directive有時候會出現問題。首先using namespace std這種用法並不會導致效能上的變化。而是在程式比較大的時候,會出現意外的名稱衝突。例如使用如下的形式 using namespace a using names...
使用SQL SERVER需要注意的一些細節
養成寫注釋的習慣。比如儲存過程,我們不僅在建立儲存過程的時候寫注釋,而且是以後的開發版本中修改了儲存過程,那麼也要寫注釋。儲存過程不要以sp 開頭,因為系統儲存過程都是以sp 開頭的。而且在執行sp 開關的儲存過程時資料庫引擎首先在master資料庫中查詢這個儲存過程,如果找不到,再去其它資料庫查詢...
swing程式設計的一些需要注意的事情
swing是非執行緒安全的,也就是說,如果多個執行緒同時對乙個swing元件進行操作,很可能會引發異常等問題,以至程式崩潰。畢竟,repaint是乙個比較花費時間的操作,如果乙個swing元件在repaint的過程中,其內容被更改,就會導致repaint的內容與修改後的內容不符,可能導致訪問錯誤 比...