2013-07-10 2 views
0

Я получаю сообщение об ошибке, которого я не могу решить.Странная ошибка смещения в PHP

Ошибка:

Uninitialized string offset: 1 

Код:

if($play_count_within_45_minutes[1] > $play_history_old_over_45_minutes_ago[$i][1]){...} 

ошибка происходит на переменной $play_count_within_45_minutes[1], потому что при изменении индекса 0 (как и в $play_count_within_45_minutes[0]), его работает отлично.

У меня было показать, какое значение будет, и он выводит хорошо, с этим кодом:

print_r($play_count_within_45_minutes[1]); 

Выход есть:

1.0E+80 

Оригинальная переменная декларация:

$play_count_within_45_minutes = [0, 100000000000000000000000000000000000000000000000000000000000000000000000000000000]; 

Я не думаю, что число слишком велико, поскольку я попытался сменить его 1, и я получил sam e ошибка.

Я нашел, что это что-то делать с этим контуром (print_r() находится там, как я тестировал его, и это дает ту же ошибку):

for($i=0; $i <= (count($play_history_old_over_45_minutes_ago)-1); $i++){ 
    echo "<br>"; 
    print_r($play_count_within_45_minutes[1]); 
    echo "<br>"; 
    if($play_count_within_45_minutes[1] > $play_history_old_over_45_minutes_ago[$i][1]){ 
     $play_count_within_45_minutes = $play_history_old_over_45_minutes_ago[$i][1]; 
    } 
} 
+1

Какова ваша версия PHP? Объявление массивов '$ var = [];' не произошло до v5.4 http://php.net/manual/en/language.types.array.php 'Начиная с PHP 5.4 вы также можете использовать синтаксис короткого массива , который заменяет array() на [] .' – Sean

+0

Вы могли бы опубликовать вывод sizeof ($ play_count_within_45_minutes)? – lexmihaylov

+0

Посмотрите на [этот ответ] (http://stackoverflow.com/a/15538676/2493918). –

ответ

0

Хорошо, я нашел причину, я не мог выясните это.

То, что я не знал об ошибках PHP является то, что он рассматривает все после первоначального if заявления в той же строке, так что даже если ошибка была на линии 105, он продолжал говорить мне, что это было на 104.

Тем не менее, я до сих пор не знаю, почему смена оригинала $play_count_within_45_minutes[1] на $play_count_within_45_minutes[0] решила проблему. Тем не менее, это все равно было бы проблемой.

Фиксированный код:

for($i=0; $i <= (count($play_history_old_over_45_minutes_ago)-1); $i++){ 
    echo "<br>"; 
    print_r($play_count_within_45_minutes[1]); 
    echo "<br>"; 
    if($play_count_within_45_minutes[1] > $play_history_old_over_45_minutes_ago[$i][1]){ 
     $play_count_within_45_minutes[1] = $play_history_old_over_45_minutes_ago[$i][1]; 
    } 
} 

Похоже, тупой ошибки, но я действительно не знал о PHP обрабатывать всю строку после if заявления в той же строке.

+0

Хорошо, что ты узнал. Решив проблемы самостоятельно, вы запомните это лучше (по крайней мере, у меня было несколько подобных ситуаций). –

+0

Определенно. Это моя первая сложная логическая PHP-программа. До сих пор я многому научился. – JVE999

Смежные вопросы