2015-04-16 4 views
0

Я пытаюсь заставить эту функцию работать, но по какой-то причине она ошибочно выводит на строку foreach, говоря, что есть недопустимый аргумент.Для каждого цикла в PHP ошибка из «недопустимого аргумента»

$scores= TESTAPI::GUL($user->ID); 
if (empty($scores)) { 
    echo "<p>No Scores</p>"; 
} else { 
    foreach ($scores as $score) { 
     echo "<p>".$score."</p>"; 
    } 
} 

Ошибки я получаю: PHP Warning: Invalid argument supplied for foreach()

+2

Добавить 'var_dump ($ баллов);' до Еогеасп линии. Каков результат? – Mex

ответ

1
$scores = TESTAPI::GUL($user->ID); 

if (is_array($scores) && count($scores)) { 
    foreach ($scores as $score) { 
     echo "<p>".$score."</p>"; 
    } 
} else { 
    echo "<p>No Scores</p>"; 
} 
+1

Я сделал следующее с использованием того, что вы положили, и он отлично работает: 'if (! Is_array ($ scores) &&! Count ($ score)) {' – Ryflex

+2

Будьте осторожны, выражение '(! Is_array ($ scores) &&! count ($ score)) 'также будет истинным, если' $ scores = false', так что вы можете получить неожиданные результаты. –

+0

Прекрасно тонкий ответ. Я просто хотел бы добавить, что '&& count ($ scores)' можно безопасно удалить - если это пустой массив, цикл не будет введен в любом случае. – jeromegamez

1

Похоже $scores не является ни массивом, ни объектом ...

+0

Можете ли вы предоставить дополнительный контекст, такой как документация для поддержки этой теории? –

+0

Здесь вы находитесь https://github.com/php/php-src/blob/bc5811f361ead53a803046b128a64d15aba2f2e5/Zend/zend_vm_def.h#L5788 –

2

Например, empty('') также будет true.

Я бы порекомендовал проверить is_array($scores) && count($scores) вместо empty(), чтобы убедиться, что api возвращает полезный выход (массив), и что это содержит элементы (count() > 0, который является истинным).

1

Попробуйте это -

foreach ((array) $scores as $score) { ... 
+0

Как и в общем случае: Тип отливки в массив может иметь нежелательные побочные эффекты, например. если значение является объектом. – jeromegamez

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