3

我希望能够做到以下几点:

$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

5 回答 5

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];
}
于 2008-10-10T15:44:00.980 回答
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
?>
于 2008-10-10T15:54:49.320 回答
1

您可能首先不应该通过引用传递。这样做通常被认为是不好的做法,因为它很难看到状态在哪里被修改。

引用速度更快是一个非常普遍的误解。事实并非如此——事实上,它们的速度有点慢,但速度太慢了,这并不重要。PHP 有一个称为 copy-on-write 的系统,这意味着在您写入变量之前实际上并未复制变量。

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

于 2008-10-11T11:30:35.500 回答
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"];
于 2009-01-10T00:46:55.233 回答
-1

该行:

结束($array_of_arrayrefs)[“一个”] = 1;// 窒息这个

引发解析错误:

解析错误:语法错误,第 65 行 /file.php 中的意外“[”

确保您拥有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
于 2008-10-10T15:42:13.840 回答