我遇到这个问题,我无法从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;
}
答案 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
尚未定义。您可以使用像
// beginLine // endLine
$textToEcho = substr($logTxt, $positions[$i-1], $positions[$i]);
当然,您需要在第一次循环之前将$positions[-1]
设置为0
或像这样设置为smth(之前不清楚之前发生了什么)
UPD我已经尝试过您的代码并得出结论
$char
是$logTxt
中的第一次出现,则