2016-09-08 3 views
1

Для этого примера, когда я называю переменную $my_settings, результат будет выглядеть следующим образом:PHP: массив с пустым значением дает ошибку в Еогеаспе

Array (
    [personal_options] => Array (
      [rich_editing] => rich_editing 
      [admin_color] => admin_color 
      [comment_shortcuts] => comment_shortcuts 
      [admin_bar_front] => admin_bar_front 
     ) 
    [name] => Array (
      [nickname] => nickname 
     ) 
    [contact_info] => Array (
      [url] => url 
     ) 
    [about_yourself] => Array (
      [description] => description 
     ) 
    [yoast_seo] => 
) 

Когда я бег foreach петли, получить все любимец "Недопустимый аргумент, предоставленный для ошибки foreach() ", потому что этот массив имеет [yoast_seo] =>, который пуст и отбрасывает его.

В настоящее время мой foreach настроен как:

$my_settings = get_option('dsbl_profile_settings'); 

if (is_array($my_settings) || is_object($my_settings)) { 
    foreach ($my_settings as $group => $item) { 
     foreach ($item as $value) { 
      echo '<pre>'; print_r($value); echo '</pre>'; 
     } 
    } 
} 

Как вы можете видеть, я уже использовать is_array() и is_object() проверку в моем цикле. Я предполагаю, что мне также нужно выполнить чек, чтобы проверить, не пусто ли он еще до запуска [yoast_seo] =>? Я теряюсь на лучший способ осуществить это, так как я попробовал следующее в моем if заявлении:

if (is_array($profile_fields) || is_object($profile_fields) || isset($profile_fields)) { // Attempt #1 

if ((is_array($profile_fields) || is_object($profile_fields)) && isset($profile_fields)) { // Attempt #2 

ответ

1

Это потому, что у вас есть вложенные Еогеасп и вы обеспечиваете пустую переменную, вы должны проверить, если переменная - массив перед прохождением.

if (is_array($my_settings) || is_object($my_settings)) { 
    foreach ($my_settings as $group => $item) { 
     if(is_array($item)) { 
      foreach ($item as $value) { 
       echo '<pre>'; print_r($value); echo '</pre>'; 
      } 
     } 
    } 
} 
+1

Я вижу, поэтому я проверял неправильный уровень для пустой переменной. Спасибо, что указали это и уточнили. –

1

Вы проверили is_array($my_settings) для $my_settings, который является правильным. Но как насчет foreach ($item as $value)?

Ваша ошибка в отношении цикла группового уровня. Не для $my_settings.

Так что, если вы

if (is_array($my_settings) || is_object($my_settings)) { 
    foreach ($my_settings as $group => $item) { 
     if (!empty($item) && (is_array($item) || is_object($item))) { 
      foreach ($item as $value) { 
       echo '<pre>'; print_r($value); echo '</pre>'; 
      } 
     } 
    } 
} 

он должен работать. В основном такое же условие, которое вы проверяете на $my_settings.

Надеюсь, это вам поможет!

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