【问题标题】:Simple php infinite while loop problem简单的php无限while循环问题
【发布时间】:2011-07-23 18:53:13
【问题描述】:

我进入了一个无限循环,我希望你能帮助我理解为什么!

我的代码:

while($numbers{$i} != '|')
{            
        $tempString = $tempString.$numbers{$i};
        $i++;
}

$numbers 是一个字符串,我基本上试图将字符串的每个字符与'|'进行比较

现在可以了:

if($numbers{$i} != '|')
{
     echo "bla";
}

我正在传递asd|asd,所以当它找到“|”时它应该会中断但它没有!

这有什么问题吗?

还有其他方法可以将字符串分解成数组吗?

提前致谢 -- 迈克

【问题讨论】:

  • 不使用 PHP 的 explode 函数有什么原因吗?
  • @GWW 是啊不知道有这样的功能:)我现在就试试!
  • 或者,如果您正在搜索“|”的第一种情况使用strpos
  • 您可以添加更多代码吗?没有上下文很难判断这里发生了什么。
  • @mixkat:PHP 几乎可以处理所有事情。

标签: php while-loop infinite-loop


【解决方案1】:

我无法解释为什么问题中的代码会导致无限循环,但这里有几个替代方案...

使用explode() 将原始字符串使用 | 分割成碎片作为分隔符,然后从结果数组中访问第一部分:

$bits = explode('|', $numbers);
$tempString = $bits[0];

或者,使用strpos() 查找第一个| 的位置然后使用substr 提取它之前的字符:

$pos = strpos($numbers, '|');
$tempString = substr($numbers, 0, $pos-1);

【讨论】:

    【解决方案2】:

    你应该只使用 PHP 的 explode 函数:)

    【讨论】:

      【解决方案3】:

      我怀疑当您递增 (i++) 时,您正在索引 $numbers 的末尾,并且 PHP 正在为您扩展 $number,可能带有空白或空字符。您可能还需要检查 i 是否大于 $number 的当前大小以停止循环。

      考虑将 echo $numbers{i} 放入循环中以查看发生了什么。

      【讨论】:

      • 这是真的!我应该用不同的方式来表达这个问题。
      猜你喜欢
      • 1970-01-01
      • 2011-06-17
      • 2012-10-29
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2014-05-30
      相关资源
      最近更新 更多