在php中的函数内将数组的指针设置为数组的特定元素

时间:2014-09-16 14:49:10

标签: php arrays

我有一个数组,想要将指针设置为其中的一个特定元素(在函数内)

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

它以无限循环结束。

我做错了什么?

4 个答案:

答案 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)

因为在我看来,还没有人确定他们的答案是正确的,所以这里是我的。它修复了您犯的多个错误:

  1. 你没有将数组传递给函数 - 没有它就不会工作
  2. 您必须通过引用将此数组传递给函数,否则函数不会更改原始数组中的任何内容。相反,使用global关键字既不是一个好的也不是首选的想法。
  3. 应该在函数中提供允许的$ sides,以防止意外地做任何事情
  4. 在函数内部使用$_GET通常不是一个好的设计 - 将所需的$ _GET值作为参数传递
  5. 以下是代码:

    $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
             }
          }
       }
    }