PHP: массив с пустым значением выдает ошибку в foreach

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

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

Решение

Это потому, что у вас есть вложенный foreach и вы предоставляете пустую переменную, вы должны проверить перед передачей, является ли переменная массивом.

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

Другие решения

Вы проверили 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,

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

1

По вопросам рекламы [email protected]