我创建了一个简单的测试用例,它复制了我遇到的问题。
我正在使用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>
答案 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 (...)
(我认为这个答案需要审查英语语法的原因)