• Main navigation
登入區塊
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站資訊區塊
站務管理者

kiang
 

tokimeki
 

sam0228
 

morris
 

shiang
 

SoltyRain
 

廣告





PHP Array 遇到的問題!!!
Just popping in
註冊日期:
2007/7/13 9:53
文章: 1
Server 環境:
System Windows 2003 build 2195
Microsoft-IIS/5.0 ISAPI
PHP Version 5.2.0

程式碼:
$custs = array();
if (mysql_num_rows($rows) > 0) {
$i = 0;
while ($obj = mysql_fetch_object($rows)) {

$cust->getData($obj->CUST_ID);

$custs[] = $cust;

echo $i."-".$custs[$i]->cust_id."<br>";

$i++;

}

echo $custs[0]->cust_id."<br>";
echo $custs[1]->cust_id."<br>";

}

顯示結果:
0-N100H001
1-N100H002
N100H002
N100H002

-------------------------------------------------------------------------
以上的問題在部份主機上, 又不會出現這種狀況, 請問是環境變數的問題, 還是php 的bug, 還是寫法不對?

Jeffrey Yeh

發表日期:2007/7/13 10:36
應用擴展 工具箱


回覆: PHP Array 遇到的問題!!!
Just can't stay away
註冊日期:
2006/12/26 8:48
文章: 144
這個問題牽涉到 PHP 內部 copy-on-write 記憶體管理機制,解釋起來挺麻煩的。

我直接說解法,把順序改一下,改成:

$custs 
= array();
$i 0;
while (
$obj mysql_fetch_object($rows)) {
    
$custs[$i] = $cust//copy
    
$custs[$i]->getData($obj->CUST_ID); //then write
    
echo $i."-".$custs[$i]->cust_id."<br>";
    
$i++;
}

發表日期:2007/7/13 16:34
應用擴展 工具箱


回覆: PHP Array 遇到的問題!!!
Just can't stay away
註冊日期:
2006/12/26 8:48
文章: 144
你原來的寫法,是 write then copy 。

PHP 會讓 $custs[0] ~ $custs[n] 都以捷徑形式指向都一個 $cust 的記憶體內容。PHP 要等到你對其中一個陣列元素做 write 動作時,才會切斷連結,產生獨立的記憶體內容。

發表日期:2007/7/13 16:41
應用擴展 工具箱







[進階搜尋]