PHP current()函数是否返回数组的副本或引用?

时间:2011-11-15 21:23:43

标签: php arrays pointers multidimensional-array

我创建了一个简单的测试用例,它复制了我遇到的问题。

我正在使用next()current()函数遍历二维数组,并希望将数组指针设置为特定位置。因此,给定一个变量名为$food的2D数组,其数组结构如下:

array
  0 => <-- POINTER LOCATION
    array
      0 => string 'apple' <-- POINTER LOCATION
      1 => string 'orange'
  1 => 
    array
      0 => string 'onion'
      1 => string 'carrot'

...以及以下代码段:

// move the inner array's pointer once
$should_be_orange = next(current($food));

// now check that inner array's value
$should_still_be_orange = current(current($food));

...为什么$should_be_orange的值为“橙色”而$should_still_be_orange“苹果”的值是多少?这是因为current()函数返回内部数组的副本,谁的指针被迭代,然后被销毁(保持原始数组不变)?或者我只是做错了什么我没抓到?

问题的根源是,如果您不知道外部数组的键(并且必须使用current()函数来获取外部数组的指针位置),如何移动内部数组的指针??< / p>

2 个答案:

答案 0 :(得分:2)

实际上current()会从数组中返回一个元素。在您的情况下,此元素也是一个数组,这就是next()在您的代码中完全正常工作的原因。您的next()无法在$food数组上运行,但在$food[0]的副本current()上无法使用,{{1}}

答案 1 :(得分:1)

不能在参数中传递函数,你必须只能变量,因为参数是引用:

function current(&$array) {...}
function next(&$array) {...}

正确的语法是:

// move the inner array's pointer once
$tmp = current($food);
$should_be_orange = next($tmp);

// now check that inner array's value
$tmp = current($food);
$should_still_be_orange = current($tmp);
                 ^^^^^^ NO! It should be "apple" ! When you do next($tmp) it will be orange !

演示:http://codepad.viper-7.com/YZfEAw

文档:


当您学习PHP时,您应该使用命令显示所有错误:

error_reporting(E_ALL);

使用它你应该收到通知:

Strict Standards: Only variables should be passed by reference in (...) on line (...)

(我认为这个答案需要审查英语语法的原因)