2010-07-05 6 views
0

Можно создать дубликат:
Invalid argument supplied for foreach()Недопустимый аргумент для foreach!

У меня есть следующий код:

<? 
foreach($format as $form) 
{ 
    echo $form; 
    ?> 
    <ul> 
     <? 
     $s = $database->onlineFormatUsers($form); 
     while($row=mysql_fetch_assoc($s)) 
     { 
      $username=$row['username']; 
      $id=$row['id'];?> 
      <li><a href="../userprofile.php?id=<?echo $id?>"><?echo "$username";?></a></li> 
     <? 
     } 
     ?> 
    </ul> 
    <? 
} 
?> 

<? 
//the active formats 
$f = $database->activeFormats(); 
while($row=mysql_fetch_assoc($f)) 
{ 
    $format=$row['name']; 
} 
?> 

Это говорит сво недопустимый аргумент? По какой причине? Thanks

+0

Пожалуйста, покажите, откуда берется '$ format'. – Unicron

+2

Можете ли вы предоставить нам 'print_r' или' var_dump' '$ format', до цикла foreach? – Charles

+0

$ формат кажется заселенным после foreach, а не раньше. Переместите обработку вывода БД до начала foreach. Вы все равно должны использовать проверку массива только в том случае, если из базы данных ничего не возвращается. –

ответ

3

$format, вероятно, не является массивом.

Оберните блок в блок if(is_array($format)) { } или отбросите его в массив, выполнив $format = (array)$format.

+0

О, формат должен быть массивом? Я отредактирую, чтобы показать, откуда берется формат $. – sark9012

+0

Да, 'foreach' работает только с массивами. – ceejayoz

+0

вместо выполнения $ format = (array) $ format; вы можете просто мгновенно сделать foreach ((массив) $ format как $ form) –

0

Вы уверены, что формат $ - это массив? положить

<?php echo gettype($format); ?> 

перед циклом Еогеасп

0

$ формат не является массивом или не существует! Перед началом торгов

if(is_array($format)){ 
    foreach($format ... 
} 
Смежные вопросы