PHP:具有空值的数组在 foreach 中给出错误
PHP: array with empty value gives error in 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
循环时,得到大家最喜欢的“Invalid argument supplied for 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()
检查。我的猜测是我还需要执行检查以查看它是否在 运行s [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
因为你嵌套了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>';
}
}
}
}
您已检查 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
.
的条件基本相同
希望对您有所帮助!
对于此示例,当我调用变量 $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
循环时,得到大家最喜欢的“Invalid argument supplied for 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()
检查。我的猜测是我还需要执行检查以查看它是否在 运行s [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
因为你嵌套了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>';
}
}
}
}
您已检查 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
.
希望对您有所帮助!