Простая PHP бесконечная задача цикла - PullRequest
1 голос
/ 27 марта 2011

Я попал в бесконечный цикл, и я надеялся, что вы поможете мне понять, почему!

Мой код:

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

$numbers - это строка, и я пытаюсь сравнить каждый символ строки с '|'

Теперь это работает:

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

И я передаю asd|asd, поэтому он должен сломаться, когда обнаружит "|" но это не так!

Что с ним не так?

Есть ли другой способ разбить строку на массив?

Заранее спасибо - Майк

Ответы [ 3 ]

2 голосов
/ 27 марта 2011

Я не могу объяснить, почему код в вопросе приводит к бесконечному циклу, но вот несколько альтернатив ...

Использование explode () для разбиения исходной строки на части с помощью | в качестве разделителя затем получите доступ к первой части из полученного массива:

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

Или используйте strpos () , чтобы найти местоположение первой | затем используйте substr для извлечения символов перед ним:

$pos = strpos($numbers, '|');
$tempString = substr($numbers, 0, $pos-1);
1 голос
/ 27 марта 2011

Я подозреваю, что при увеличении (i ++) вы индексируете конец числа $, и что PHP расширяет для вас число $, возможно, с пустым или нулевым символом.Вы, вероятно, также должны проверить, что я не больше текущего размера $ number, чтобы остановить цикл.

Подумайте о том, чтобы поместить echo $ numbers {i} в ваш цикл, чтобы увидеть, что происходит.

0 голосов
/ 27 марта 2011

Вы должны просто использовать PHP explode function:)

...