【问题标题】:php not able to get array valuephp无法获取数组值
【发布时间】:2017-09-20 19:27:50
【问题描述】:

我有一个问题,我无法在 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;
}

【问题讨论】:

  • 在 for 循环中总是需要 $positions[2] 吗?就目前而言,我根本看不到 for 循环的原因

标签: php arrays for-loop while-loop


【解决方案1】:

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

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

如果您仍然想使用for 循环,我相信您的问题是您只引用数组的第三个位置(键 2,因为数组从 0 开始),而不是循环指向的位置。你可以通过这样做来修复它

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

}

【讨论】:

  • $endLine = $position; 加上$lastEndLine = $endLine;?
  • @vladkras 那是原始代码中存在的差异,我不知道意图。
  • 谢谢,我太专注于 while 循环必须工作,以至于我卡住了。
【解决方案2】:

由于$positions[2],您的$endLine 始终具有数组中的第三个元素。试试改成$positions[$i]

【讨论】:

    【解决方案3】:

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

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

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

    UPD 我试过你的代码并得出结论

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

    【讨论】:

    • 是的,我知道这个问题,但我需要能够先获取变量,这样我才能走得更远。
    • 所以在第一次循环时将$beginLine设置为零,而不是未定义的变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2020-05-29
    相关资源
    最近更新 更多