PHP:具有空值的数组在foreach中出错

时间:2016-09-08 04:42:36

标签: php arrays foreach empty-list

对于此示例,当我调用变量$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

2 个答案:

答案 0 :(得分: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 :(得分: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的条件相同。

希望这对你有所帮助!