2008-10-10 118 views
3

我希望能夠做到以下幾點:如何在PHP中的數組內使用數組引用?

$normal_array  = array(); 
$array_of_arrayrefs = array(&$normal_array); 

// Here I want to access the $normal_array reference **as a reference**, 
// but that doesn't work obviously. How to do it? 
end($array_of_arrayrefs)["one"] = 1; // choking on this one 

print $normal_array["one"]; // should output 1 

問候

/R

回答

4

end()不返回的最後一個值的參考,而是最後的價值本身。這是一個解決方法:

$normal_array  = array(); 
$array_of_arrayrefs = array(&$normal_array); 

$refArray = &end_byref($array_of_arrayrefs); 
$refArray["one"] = 1; 

print $normal_array["one"]; // should output 1 

function &end_byref(&$array) { 
    $lastKey = end(array_keys($array)); 
    end($array); 
    return $array[$lastKey]; 
} 
-1

行:

end($array_of_arrayrefs)["one"] = 1; // choking on this one

拋出一個解析錯誤:

Parse error: syntax error, unexpected '[' in /file.php on line 65

確保您已激活error_reportingdisplay_error

我不知道你想做什麼,但這個工程:

$normal_array  = array(); 
$array_of_arrayrefs = array(&$normal_array); 
// Here I want to access the $normal_array reference **as a reference**, 
// but that doesn't work obviously. How to do it? 
$array_of_arrayrefs[0]["one"] = 1; 
//end($array_of_arrayrefs)["one"] = 1; // choking on this one 
print $normal_array["one"]; // should output 1 
1

這裏有幾種方法,我都覺得這兩種方法都不令人滿意。 我敢肯定有一個更好的辦法..

<?php 
$normal_array  = array(); 
$array_of_arrayrefs = array("blah", &$normal_array); 

foreach ($array_of_arrayrefs as &$v); 
$v["one"] = 1; 

echo $normal_array["one"]; //prints 1 
?> 


<?php 
$normal_array  = array(); 
$array_of_arrayrefs = array("blah", &$normal_array); 

$lastIndex = @end(array_keys($array_of_arrayrefs)); //raises E_STRICT because end() expects referable. 
$array_of_arrayrefs[$lastIndex]["one"] = 1; 

echo $normal_array["one"]; //prints 1 
?> 
1

你也許不應該被引用在第一時間傳遞。這樣做通常被認爲是不好的做法,因爲它很難看到狀態被修改的地方。

這是一個很常見的誤解,即引用速度更快。事實並非如此 - 事實上,它們速度較慢,但​​數量有限,實際上並不重要。 PHP有一個名爲copy-on-write的系統,這意味着變量在寫入之前不會被實際複製。

你真的需要引用的唯一地方是在PHP4中,否則對象將被克隆。這在PHP5中不需​​要。

0

函數end()不只是返回一個值。它也移動數組的內部指針。然後我們可以使用key()來獲取索引,之後我們可以使用常規數組訪問來進行賦值。

$normal_array  = array(); 
$array_of_arrayrefs = array(&$normal_array); 

end($array_of_arrayrefs); 
$array_of_arrayrefs[ key($array_of_arrayrefs) ]["one"] = 1; 

print $normal_array["one"];