2015-03-26 1 views
1

Во-первых, код:содержания Изменения массива для исправления NULL API возвращает

for($j = 0; $j < 5; $j++) { 
$rgames[$j] = array(); 
    for($i = 0; $i < 10; $i++) { 
      array_push($rgames[$j], array($json[$j]->games[$i]->stats->championsKilled, $json[$j]->games[$i]->stats->numDeaths)); 
    }}; 

JSON [0] до [4] содержит 5 массивов, который содержит более 10 для данных последних 10 игр каждого игрока. Из приведенного выше кода все вытягивается и организовано должным образом, что является одной небольшой проблемой. API, который я использую, возвращает только непустые значения в интересах полосы пропускания, поэтому я застрял с некоторыми NULL здесь и там. Мне нужно найти их и изменить их на нули, поэтому у меня есть что-то подходящее для отображения, и поэтому мой журнал ошибок перестанет скулить на меня.

Надеюсь, я предоставил достаточно информации. Я только что узнал PHP около 2 недель назад, поэтому я все еще пытаюсь понять это. Спасибо за любую информацию!

EDIT: окончательный код в ответе ниже.

+0

Опубликовать print_r массива –

+0

@AdrianCidAlmaguer Я не был уверен, какой из них вы хотели, поэтому вот print_r из $ json: http://pastebin.com/7eFc5sdE и вот один из $ rgames: http://pastebin.com/MLmvcSCp – Bkid

ответ

0

Если я правильно понял, $json[$j]->games[$i]->stats->championsKilled и $json[$j]->games[$i]->stats->numDeaths являются переменными, которые иногда появляются нулевыми? В этом случае вы можете проверить на нуль и установите 0.

/* shorthand if/else in array */ 
array_push($rgames[$j], array(
    (isset($json[$j]->games[$i]->stats->championsKilled)) ? $json[$j]->games[$i]->stats->championsKilled : 0, 
    (isset($json[$j]->games[$i]->stats->numDeaths)) ? $json[$j]->games[$i]->stats->numDeaths : 0 
)); 

В качестве альтернативы, если переменные должны быть целыми числами, вы можете использовать intval, чтобы преобразовать их в целые числа. Если они уже являются целыми числами, ничего не меняется. Если они равны нулю или пусто, они становятся 0.

array_push($rgames[$j], array(
    intval($json[$j]->games[$i]->stats->championsKilled), 
    intval($json[$j]->games[$i]->stats->numDeaths) 
)); 
+0

Все, что вышло из API, является целым числом, поэтому я использовал ваш метод intval, и он отлично работал! Единственное, что PHP все еще жалуется на это в моих журналах ошибок (Undefined property: stdClass :: $ championsKilled и т. Д. И т. Д. Для других) тоже. Ты думаешь, мне нужно просто @ их и закрыть их? – Bkid

+0

Лучшая практика - избегать использования @ и проверять переменные с помощью 'isset()'. Я обновлю код в своем ответе. – Samutz

0

После изменения немного @ кода Samutz, я был в состоянии придумать с этим конечный код:

for($j = 0; $j < 5; $j++) { 
$rgames[$j] = array(); 
    for($i = 0; $i < 10; $i++) { 
      array_push($rgames[$j], array(isset($json[$j]->games[$i]->stats->championsKilled) ? $json[$j]->games[$i]->stats->championsKilled : 0, isset($json[$j]->games[$i]->stats->numDeaths) ? $json[$j]->games[$i]->stats->numDeaths : 0, isset($json[$j]->games[$i]->stats->assists) ? $json[$j]->games[$i]->stats->assists : 0, empty($json[$j]->games[$i]->stats->win) ? "Loss" : "Win")); 
}}; 

Спасибо всем!

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