从函数PHP中的数组接收数据

时间:2013-11-29 20:22:38

标签: php arrays function global-variables scope

我对PHP很新,并且遇到阵列问题。我刚刚设置了一个带有数组的函数。一切都工作得很好,除非我在函数外部调用我的数组似乎没有任何内容,(我的最后一个for循环没有打印出来)错误显示“注意:未定义的偏移量:对于每个数字”。

以下是代码:

$col_num = array();

// `getcoleachrow()`: function to get each data in each column row
function getcoleachrow ($col = array(), $value, $html){

  // 220 cells in the table
  for ($value=$value;$value<220;$value+=11){

    //gets the data from a cell then turn it to text and stores it in an array selected
    array_push($col, $html->find('td', $value)->plaintext);
  }

  // 20 rows and 20 data from the table in an array
  for ($rows = 0;$rows<=19;$rows++) {

    //print out array
    echo $col[$rows];
  }

} // getcoleachrow

// Call the `getcoleachrow()` function
getcoleachrow($col_num, $pos, $html);
//getcoleachrow($col_team, $team);


// Goes through every row
for($row = 0;$row<=19;$row++){
  echo $col_num[$row];
}

最后一个for循环是空的,但getcoleachrow($col_num, $pos, $html);打印出我想要的每一个。

7 个答案:

答案 0 :(得分:1)

您可以使用global变量解决问题。但我建议你返回新阵列并将其分配给col_num。因为你修改了一个数组,但只是在函数内部,那个数组的实例没有出来。
尝试更改您的函数以返回如下数组:

function getcoleachrow($col = array(), $value, $html){

   //220 cells in the table
   for($value=$value;$value<220;$value+=11){

       //gets the data from a cell then turn it to text and stores it in an array selected
      array_push($col, $html->find('td', $value)->plaintext);
   }

   //20 rows and 20 data from the table in an array
   for($rows = 0;$rows<=19;$rows++){

       //print out array
       echo $col[$rows];
   }
   return($col);
}

并以此模式调用您的函数:

$col_num = getcoleachrow($col_num, $pos, $html);

答案 1 :(得分:1)

不清楚问题是什么。函数getcoleachrow()遍历数组&amp; echo是值。那么最终的for($row = 0;$row<=19;$row++){循环是什么?实际上看一下你的代码还不清楚,因为你在第一行中启动它会做什么$col_num,将它发送到getcoleachrow()函数然后在那之后有那个奇怪的循环。缺了点什么。为了清晰起见,重新格式化了您的代码。编辑原帖以提供帮助。

编辑:根据原始海报的评论重构示例。该函数根本不返回值。让它返回一个值&amp;你很高兴。

// `getcoleachrow()`: function to get each data in each column row
function getcoleachrow ($col = array(), $value, $html){

  // Initing the array.
  $col_num = array();

  // 220 cells in the table
  for ($value=$value;$value<220;$value+=11){

    //gets the data from a cell then turn it to text and stores it in an array selected
    array_push($col, $html->find('td', $value)->plaintext);
  }

  // 20 rows and 20 data from the table in an array
  for ($rows = 0;$rows<=19;$rows++) {

    //print out array
    $col_num[] = $col[$rows];
  }

  // Return the `$col_num` array.
  return $col_num;

} // getcoleachrow

// Call the `getcoleachrow()` function
$col_num = getcoleachrow($col_num, $pos, $html);
//$col_num = getcoleachrow($col_team, $team);


// Goes through every row
for($row = 0;$row<=19;$row++){
  echo $col_num[$row];
}

答案 2 :(得分:0)

您永远不会返回值。您需要将其返回并将其分配给变量以便以后能够使用它。试试这个:

//function to get each data in each column row
function getcoleachrow($value, $html) {
  $col = array();

  //220 cells in the table
  for($value=$value;$value<220;$value+=11){

    //gets the data from a cell then turn it to text and stores it in an array selected
    array_push($col, $html->find('td', $value)->plaintext);
    }

  // Return it
  return $col;
  }

// No need to pass the array if you follow this path (returning the array)
$col_nums = getcoleachrow($pos, $html);

//Goes through every row
for($row = 0;$row<=19;$row++){
  echo $col_num[$row];
  }

在您的背景上不确定,但变量默认情况下没有全局范围(通常也不应该在PHP中),就像在其他语言(如javascript)中一样,也不会像C中那样通过引用传递数组。但是,你实际上可以用PHP返回一个数组,这非常方便(;

另一件事是你不需要声明变量来传递它(你不需要传递它),所以你的代码可能会更清晰。

答案 3 :(得分:0)

您的$col_num数组不在范围内:

你可以解决这个问题:

function getcoleachrow(&$col = array(), $value, $html){
-----------------------^ this here
.... 
}

$col_num=array()
getcoleachrow($col_num, $pos, $html);

但我不会用这个! 我会用:

function getcoleachrow($col = array(), $value, $html){
...
return $col // these is my interest
}

然后

$col_num= getcoleachrow($col_num, $pos, $html);

使用函数的返回值

答案 4 :(得分:0)

一些事情:

  1. 您的可选参数只应出现在函数声明的末尾,因此您应该从第一个参数中删除= array()

    function getcoleachrow($col, $value, $html)
    
  2. 数组(就像标量一样)不是通过引用传递的,所以你可以:

    一个。在函数声明中指出:

    function getcoleachrow(&$col, $value, $html)
    

    湾在函数末尾返回数组:

    function getcoleachrow($col, $value, $html)
    {
        // ...
        return $col;
    }
    $col_num = getcoleachrow($col_num, $pos, $html);
    
  3. 如果您总是使用空数组调用该函数,您可能希望完全放弃该参数:

    function getcoleachrow($value, $html)
    {
        $col = [];
        // ...
        return $col;
    }
    $col_num = getcoleachrow($pos, $html);
    

答案 5 :(得分:0)

您需要让函数返回一些内容,然后为返回的输出分配一个变量。在你的情况下,我正在考虑以下变化:

返回$ col;在关闭大括号的函数之前,在getcoleachrow函数的末尾添加这一行。

$ col_num = getcoleachrow($ col_num,$ pos,$ html);替换为该行: getcoleachrow($ col_num,$ pos,$ html);

答案 6 :(得分:-1)

您已将所有值添加到数组:$ col而不是数组$ col_num。 这就是为什么你不在函数之外输出。

$ col = array();创建一个名为$ col。

的新数组

更改

function getcoleachrow($col = array(), $value, $html){

function getcoleachrow($col, $value, $html){

或者只是将其留下并在函数

中使用$ col_num