【问题标题】:Php scope: array value cannot be accessed outside of loopPHP范围:数组值不能在循环外访问
【发布时间】:2017-10-19 10:41:48
【问题描述】:

我的代码:

<?php
$file="./Speed10.txt";
$document=file_get_contents($file);
$rows = explode ('(', $document);

$a[$r][$c];
for($r=0; $r<9103; $r++){ //1903 rows in text file     

    $a[$r][$c]; // Array declared here - doesnt solve problem

    for($c=0; $c<103; $c++){
        //$a[$r][$c] = rand();
       // print_r($a[$r][$c]);
    }
}
foreach ($rows as $ri => $row) {
    $a[$ri][$c] = explode (';', $row);
    //XXXXXXXXXXXXX    
}
print_r($a[1][$c]); // NOT PRINTING*
?>

如上所示,我有一个二维数组,它将文本文件分成行和列。 那部分工作得很好,但我尝试打印出一行的所有单元格,它没有打印。

但是,如果我将 print_r 行移动到 X 所在的位置,它就可以工作(尽管它是在循环中打印出来的)。对我来说听起来像是一个范围问题,但我不知道是什么。我尝试将数组初始化为全局变量,但这并没有解决它。

【问题讨论】:

  • 为什么不 $a = [];$arrayContents = array(); - 我看不出你的 $r$c 变量在哪里设置,但在 PHP 中,你可以像我描述的那样初始化一个数组.你不需要说它有多大。
  • 这里没有范围问题,因为forforeach 没有添加它自己的范围。 $c$r 声明在哪里(在第一个 $a[$r][$c] 中?你还说该文件有 1903 行,但你循环 9103 次。为什么不 $r &lt; count($rows)
  • 同样在你的最后一个foreach() 循环中,试试这样:foreach ($rows as $rowIndex =&gt; $rowData) { echo '&lt;pre&gt;' . print_r($rowIndex, 1) . ' =&gt; ' . print_r($rowData, 1) . '&lt;/pre&gt;'; } 你将能够看到每个元素。初始化$c$r 的值,并为您的变量和对象名称赋予更有意义的名称。 $c 我假设意思是“列”,但它可能意味着任何东西。
  • @ShaunBebbers 这就是我最初所做的,但我认为这可能是问题所以我改为 $a[$r][$c],根本不影响代码。如果我这样做 $a=[ ];我将在哪里初始化 $r/$c 或者它们必须在哪里?
  • @DanielRegan - 但变量 $r$c 在未声明数组之前未声明。所以它什么也没做。这是一个可能会混淆问题的非工作 PHP 脚本行。 $a = array(); - 至少 PHP 开发人员知道您想要实现什么,将名为 $a 的资源设置为 PHP 数组,稍后在脚本中将包含零个或多个元素。

标签: php html arrays multidimensional-array scope


【解决方案1】:

最后,您的脚本“按原样”执行,$c 将是 103,但 $a[1] 中的元素只会设置为从 0102

所以你访问的是一个不存在的索引,因此它什么也不打印。

我创建了一个slightly modified example,它清楚地显示了问题。

注意:未定义的偏移量:[...][...] 中的 103 行 15

【讨论】:

  • 如果我做 $a[1][1] 我得到相同的结果,所以我不认为就是这样
  • 您的脚本取决于我们不知道的文件的内容,因此如果没有这些信息,就不可能完全重现您的脚本
  • 我同意@MatteoTassinari - 请向我们展示您正在以某种方式处理的数据。可能是 PasteBin 链接之类的?或者取一小部分sn-p并将其作为测试用例。在你这样做之前,我们都和你一样猜测。还要首先说明您要达到的目标。我们只知道有些事情是行不通的,但如果没有更全面的了解,那么没有人可以帮助您。
猜你喜欢
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2012-11-18
  • 2018-09-21
  • 2020-06-07
  • 1970-01-01
  • 2015-01-24
相关资源
最近更新 更多