2011-01-24 101 views
0

解釋這一請:)爲什麼分配順序的這種改變會改變變量的內容?

如果我運行

$custId = getExternalId(); 
echo $custId . "\n"; // Prints foobar_16262499_1 
$serial = ''; 

$custId = explode('_', $custId); 
var_dump($custId); 
$custId = $custId[1]; 
$serial = $custId[2]; 

die("custId: $custId serial: $serial\n"); 

我得到

custId: 16262499 serial: 2 

這是不正確的。串行應該是1。但是,如果我改變分配的順序,以

$custId = getExternalId(); 
echo $custId . "\n"; // Prints foobar_16262499_1 
$serial = ''; 

$custId = explode('_', $custId); 
var_dump($custId); 
$serial = $custId[2]; // Change order here!!! 
$custId = $custId[1]; 

die("custId: $custId serial: $serial\n"); 

它的工作原理,並給了我

custId: 16262499 serial: 1 

爲什麼?

在這兩種情況下,陣列的var_dump產生相同的輸出:

array(3) { 
    [0]=> 
    string(4) "foobar" 
    [1]=> 
    string(8) "16262499" 
    [2]=> 
    string(1) "1" 
} 

我運行PHP/5.3.3 ZendServer對其進行訪問

嫌HEAD ...我怎麼能錯過顯而易見的:)...

回答

2

您覆蓋

$custId 

,當你寫這條線

$custId = $custId[1]; 

所以以後你得到的東西,你不要指望

$serial = $custId[2]; 

所以做這樣的

list($custId,$serial) = array($custId[1],$custId[2]); 
0
1. $custId = $custId[1]; 
2. $serial = $custId[2]; // ** 

**這實際上意味着, ($ custId [1])[2]原始的getExternalId();

由於線1之後變量$​​ CUSTID不再是

$custId = getExternalId(); 

而是僅所述第二元件(索引[1])從它的結果。

您可以通過傾銷只是一個更多的時間添加到您的調試

$custId = explode('_', $custId); 
var_dump($custId); 
$custId = $custId[1]; 
var_dump($custId); 
$serial = $custId[2]; 
相關問題