foreach 一些需要注意的地方

2021-09-30 09:34:21 字數 1522 閱讀 6676

通常迴圈訪問陣列都用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的內容與修改後的內容不符,可能導致訪問錯誤 比...