【问题标题】:Nested Foreach Loop showing - Warning: Invalid argument supplied for foreach()嵌套的 Foreach 循环显示 - 警告:为 foreach() 提供的参数无效
【发布时间】:2016-09-20 05:39:59
【问题描述】:

我有一个包含多个数据的数组。现在我想从中检索数据。 这个数组存储在$restaurant_menus

数组

Array
(
[0] => Array
    (
        [menu_group_name] => Soup
        [menu_group_cover_photo] => Array
            (
                [0] => 430
                [1] => 431
            )

        [menu_group_single_menu] => Array
            (
                [0] => Array
                    (
                        [single_menu_name] => Miryala Rasam
                        [single_menu_desc] => Pepper Rasam Masala Soup
                        [_price] => 7.99
                    )

                [1] => Array
                    (
                        [single_menu_name] => Mokkajonna Shorba
                        [single_menu_desc] => Thick sweet corn soup
                        [_price] => 8.99
                    )

            )

    )

)

我想从中显示餐厅菜单。菜单有一个像soup 这样的组。有几种汤。所以我想得到这样的信息:

----------

-- Soup
-- Cover Photo
 |----- Single menu -- Price
 |---------------------------------
 |----- Miryala Rasam ---7.99
 |----- Mokkajonna Shorba --- 8.99

-------

我一直在使用这个代码

foreach ($restaurant_menus as $restaurant_menu_names) {
    array_shift($restaurant_menu_names);
    foreach ($restaurant_menu_names as $restaurant_menu_name) {
        foreach ($restaurant_menu_name as $restaurant_menu_items) {
            foreach ($restaurant_menu_items as $restaurant_menu_item) {
                print_r($restaurant_menu_item);
            }
        }
    }
}

但显示错误:Warning: Invalid argument supplied for foreach() 当使用$restaurant_menu_items 作为参数时,它发生在第三个 foreach 循环中

【问题讨论】:

  • 在 foreach() 中调用它之前,在每个步骤中使用 is_array($restaurant_menus)。发生这种情况是因为 foreach 需要一个数组作为参数而不是字符串

标签: php arrays foreach


【解决方案1】:

在尝试访问和处理它的成员之前,您需要在每个阶段检查您是否正在处理一个数组 - 为此使用 is_array 像这样。

$menus = $restaurant_menus;

if( is_array( $menus ) && !empty( $menus ) ){
    foreach( $menus as $names ) {

        array_shift( $names );

        if( is_array( $names ) && !empty( $names ) ){
            foreach( $names as $menu ) {

                if( is_array( $menu ) && !empty( $menu ) ){
                    foreach( $menu as $items ) {

                        if( is_array( $items )  && !empty( $items ) ){
                            foreach( $items as $item ) {

                                print_r( $item );

                            }
                        }
                    }
                }
            }
        }
    }
}

$menus=array(
    array(
        'menu_group_name'=>'soup',
        'menu_group_cover_photo'=>array('430','431'),
        'menu_group_single_menu'=>array(
                array(
                        'single_menu_name'=>'Miryala Rasam',
                        'single_menu_desc'=>'Pepper Rasam Masala Soup',
                        '_price'=>7.99
                    ),
                    array(
                        'single_menu_name'=>'Mokkajonna Shorba',
                        'single_menu_desc'=>'Thick sweet corn soup',
                        '_price'=>8.99
                    )
            )
        )
);
if( is_array( $menus ) && !empty( $menus ) ){
    foreach( $menus as $names ) {

        array_shift( $names );

        if( is_array( $names ) && !empty( $names ) ){
            foreach( $names as $menu ) {

                if( is_array( $menu ) && !empty( $menu ) ){
                    foreach( $menu as $items ) {

                        if( is_array( $items )  && !empty( $items ) ){
                            foreach( $items as $item ) {

                                print_r( $item );

                            }
                        }
                    }
                }
            }
        }
    }
}

/*
    output:
    -------
    Miryala Rasam
    Pepper Rasam Masala Soup
    7.99
    Mokkajonna Shorba
    Thick sweet corn soup
    8.99
*/

【讨论】:

  • 同样的问题 :(
猜你喜欢
  • 2018-12-26
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
相关资源
最近更新 更多