2012-06-01 65 views
0

請看看下面的例子:更改一個值影響另一個

foreach($a_Header['Details'] as $i_Detail => &$a_Detail) 
    { 
    echo "{$a_Detail['VEH_TREAD_OFF']}\n"; 

    // Make a back-up of the value 
    $BAK_TREAD_OFF = $a_Detail['VEH_TREAD_OFF']; 

    // Copy some data from the saved header 
    foreach(array 
     (
     'POD_QTYORD', 
     'VEH_TREAD_OFF', 
     'RPM_SCRM_FIXEDPRICE', 
     'RPM_TRM_FIXEDPRICE', 
     'RPM_TRM_COSTPERMM', 
     'RPM_CTS_CASINGCOST', 
     'CHARGE_DESC', 
     'Hide', 
     ) as $s_Column) 
     { 
     $a_Header['Details'][$i_Detail][$s_Column] = $a_SavedHeader['Details'][$i_Detail][$s_Column]; 
     } 

    echo "{$a_Detail['VEH_TREAD_OFF']}\n"; 

    // Now restore our value 
    $a_Detail['VEH_TREAD_OFF'] = $BAK_TREAD_OFF; 
    } 

你可以看到,在進入for循環,我有備份,我恢復後的值。

這是因爲某些原因,它在循環過程中丟失。

我不是PHP大師,但是這讓我感到困惑不已,因爲我不明白爲什麼修改一個變量會影響另一個變量,除非PHP中有蟲洞!

有人能告訴我爲什麼會發生這種情況嗎?

謝謝

+0

你是如何看到它丟失的? –

+0

在我添加「備份和恢復」代碼之前,我回顯了之前顯示值和之後沒有值的內容。 – CompanyDroneFromSector7G

+1

我看不到任何代碼顯示會破壞'$ a_Detail ['VEH_TREAD_OFF'];'。這是100%的問題嗎?你是不是在這個或某些東西的功能? (在PHP中,函數有自己的作用域) –

回答

1
$i_Detail => &$a_Detail 

現在$a_Detail是對$a_Header['Details'][$i_Detail]的參考。這兩個變量都是指單個值。如果你不想要,請不要使用&

+0

謝謝,我已經想通了,感謝上述評論。這不是我的代碼。 – CompanyDroneFromSector7G

0

您的代碼示例根本不影響$ a_detail。你確定,這是這個變量的唯一參考嗎?你使用類似extract()的東西嗎?

+0

你明白爲什麼我很困惑呢?但實際上你錯了,就像我一樣。變量$ a_detail被定義爲對$ a_header ['detail']元素的引用,所以變化的變化會改變另一個元素。 – CompanyDroneFromSector7G

相關問題