通过更改函数

时间:2016-06-20 13:34:43

标签: php arrays reference

很难用言语解释我正在尝试做什么,所以我提供了一个最小的例子,见评论:

$g = array( 
    'a' => array(1, 2, 3), 
    'b' => array(4, 5, 6)
); // A global array

function &search($key) {
    global $g;
    return $g[$key];
}

$a = search('b'); // Now $a should be a reference to $g['b'], right?

$a[2] = 666;
print_r($a); // Ok changed
print_r($g); // Why not changed?

在PHP 5.6.4上测试。

我正在尝试做的事情的原因是搜索功能在我的用例中显然更复杂(不仅仅是一个键索引!),并且在找到结果之后,处理结果很方便:原始数组嵌套在各个级别。

1 个答案:

答案 0 :(得分:4)

来自the manual

  

注意:与参数传递不同,这里你必须使用&在两个地方 - 表示你想要通过引用而不是副本返回,并指示应该为$ myValue执行引用绑定而不是通常的赋值。

您的代码只需要额外的&符号(上面提到的引用“绑定”),如下所示:

$a =& search('b');