我有一个数组,想要将指针设置为其中的一个特定元素(在函数内)
function arrowlink($side){
reset($Arrowdata);
$currentelement = '$_GET[food]';
if ($side == 'left') {
while (current($Arrowdata) !== $currentelement) {
next($Arrowdata);
}
}
$ Arrowdata看起来像这样:
Array ( [0] => Apricots [1] => Asparagus [2] => Broccoli, raw [3] => Cabbage [4] => Carrots)
$ _ GET [食物]是食物的名称
我总是得到这个错误:警告:reset()期望参数1是数组,在...中给出null 和警告:current()期望参数1是数组,在......
中给出null它以无限循环结束。
我做错了什么?
答案 0 :(得分:0)
我的猜测是你在函数外定义了$Arrowdata
,这意味着$Arrowdata
在函数范围内不存在。你可以解决这个问题:
$Arrowdata= array(1,2,3,4,5,6,7,8,9,10);
$side = 'left';
arrowlink($side, $Arrowdata);
function arrowlink($side, $Arrowdata){
reset($Arrowdata);
$currentelement = '$_GET[food]';
if ($side == 'left') {
while (current($Arrowdata) !== $currentelement) {
next($Arrowdata);
}
}
答案 1 :(得分:0)
你没有定义一个数组。在你的代码中:
function arrowlink($side){
reset($Arrowdata);
$currentelement = '$_GET[food]';
if ($side == 'left') {
while (current($Arrowdata) !== $currentelement) {
next($Arrowdata);
}
}
除非您定义,否则$ ArrowData不是数组 $ ArrowData = array();作为一个数组。您还想填充$ ArrowData字段。不是 以正确的方式构建。
答案 2 :(得分:0)
如果在函数之前定义了数组,并且您想要访问它,则应使用the global
keyword。此外,您应该验证next
function返回的值(当数组中没有更多元素时,它返回FALSE
。)
function arrowlink($side){
global $Arrowdata;
reset($Arrowdata);
$currentelement = $_GET[food]; // $_GET[food] is already a string !
if ($side == 'left') {
while (current($Arrowdata) !== $currentelement){
if(next($Arrowdata) === FALSE)
break;
}
}
答案 3 :(得分:0)
因为在我看来,还没有人确定他们的答案是正确的,所以这里是我的。它修复了您犯的多个错误:
global
关键字既不是一个好的也不是首选的想法。$_GET
通常不是一个好的设计 - 将所需的$ _GET值作为参数传递以下是代码:
$Arrowdata= array(1,2,3,4,5,6,7,8,9,10);
$side = 'left';
arrowlink($Arrowdata, $side, $_GET['food']);
//notice the passing by reference
function arrowlink(& $Arrowdata, $side, $currentelement){
//put allowed sides here
$allowedSides = array('left');
//only allowed sides change arrays, others do not do anything
if (!in_array($side, $allowedSides)) return;
reset($Arrowdata);
//$currentelement = '$_GET[food]'; // it is now passed to the function
if ($side == 'left') {
while (current($Arrowdata) !== $currentelement) {
if (FALSE === next($Arrowdata)) {
break; //break if no next elements are there
}
}
}
}