php无法获取数组值

时间:2017-09-20 19:27:51

标签: php arrays for-loop while-loop

我遇到这个问题,我无法从for循环中的数组中获取值,但我可以在while循环中访问它。

我似乎无法在线找到答案,所以非常感谢帮助。

while ($pos = strpos($logTxt, $char, $pos)) 
{
   $t++;
   $pos += strlen($char);
   $positions[$t] = $pos;
}

for($i = 0; $i < sizeof($positions); $i++)
{
   $beginLine = $lastEndLine; 
   $endLine = $positions[2];
   $textToEcho = substr($logTxt,$beginLine,$endLine);
   $lastEndLine = $endLine;
}

3 个答案:

答案 0 :(得分:1)

我认为通过使用foreach循环而不是for循环可以很容易地解决这个问题,因为它是一个数组。

foreach($positions as $position) {
    $beginLine = $lastEndLine; 
    $endLine = $position;
    $textToEcho = substr($logTxt,$beginLine,$endLine);
    $lastEndLine = $endLine;
}

如果你想静止使用for循环,我相信你的问题是你只引用数组的第3个位置(键2,因为数组从0开始),而不是循环指向的那个。您可以通过执行此操作来修复它

for($i = 0; $i < sizeof($positions); $i++)
{
    $beginLine = $lastEndLine; 
    $endLine = $positions[$i];
    $textToEcho = substr($logTxt,$beginLine,$endLine);
    $lastEndLine = $endLine;

}

答案 1 :(得分:0)

由于$endLine,您的$positions[2]始终拥有数组中的第三个元素。尝试将其更改为$positions[$i]

答案 2 :(得分:0)

您的基础问题是在$positions[2]中使用常量索引。但是for循环$beginLine = $lastEndLine;中的第一行始终会失败,因为$lastEndLine尚未定义。您可以使用像

这样的smth
                              // beginLine      // endLine
$textToEcho = substr($logTxt, $positions[$i-1], $positions[$i]);

当然,您需要在第一次循环之前将$positions[-1]设置为0或像这样设置为smth(之前不清楚之前发生了什么)

UPD我已经尝试过您的代码并得出结论

    如果$char$logTxt 中的第一次出现,则
  1. 根本不起作用
  2. 它与explode()功能
  3. 几乎相同