如何在PHP中的数组内使用数组引用?

问题描述:

我希望能够做到以下几点:如何在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

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]; 
} 

行:

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 

这里有几种方法,我都觉得这两种方法都不令人满意。 我敢肯定有一个更好的办法..

<?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 
?> 

你也许不应该被引用在第一时间传递。这样做通常被认为是不好的做法,因为它很难看到状态被修改的地方。

这是一个很常见的误解,即引用速度更快。事实并非如此 - 事实上,它们速度较慢,但​​数量有限,实际上并不重要。 PHP有一个名为copy-on-write的系统,这意味着变量在写入之前不会被实际复制。

你真的需要引用的唯一地方是在PHP4中,否则对象将被克隆。这在PHP5中不需​​要。

函数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"];