我对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);
打印出我想要的每一个。
答案 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)
一些事情:
您的可选参数只应出现在函数声明的末尾,因此您应该从第一个参数中删除= array()
:
function getcoleachrow($col, $value, $html)
数组(就像标量一样)不是通过引用传递的,所以你可以:
一个。在函数声明中指出:
function getcoleachrow(&$col, $value, $html)
湾在函数末尾返回数组:
function getcoleachrow($col, $value, $html)
{
// ...
return $col;
}
$col_num = getcoleachrow($col_num, $pos, $html);
如果您总是使用空数组调用该函数,您可能希望完全放弃该参数:
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