You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何遍历带键值的多维数组?

如何遍历你的多维关联数组

嘿,你猜的完全没错!处理这种多层级的数组,确实需要嵌套的foreach循环来逐层访问数据。我结合你的数组结构,给你写个清晰的示例,看完你就明白怎么操作了~

首先,咱们得先把JSON字符串转换成PHP的关联数组(因为你提到了foreach,默认你是用PHP来处理哈),用json_decode()函数就行,记得把第二个参数设为true,这样得到的就是关联数组而不是对象:

// 你的JSON字符串
$json = '{ "success": "1", "order_details": [ { "item_order": 5, "address": "155, Mani Nagar Society, Nana Varachha, Surat, Gujarat 395006, India", "contact": "95303709", "total_price": "3330.0", "order_place": "18-05-25 06-07-20", "preparing_date_time": "", "preparing_status": "Deactivate", "dispatched_date_time": "", "dispatched_status": "Deactivate", "delivered_date_time": "", "delivered_status": "Deactivate", "menu": [ { "menu_name": "demo item", "item_amt": "200", "Ingredients": [ { "ingredients_name": "burger", "ingredients_price": "200" }, { "ingredients_name": "pizza1", "ingredients_price": "800" } ] } ] } ] }';

// 转成关联数组
$orderData = json_decode($json, true);

接下来就是逐层遍历了,咱们从最外层的order_details开始,因为它是一个包含订单的数组:

完整遍历代码示例

// 先检查order_details是否存在且是数组
if (isset($orderData['order_details']) && is_array($orderData['order_details'])) {
    // 第一层:遍历每个订单
    foreach ($orderData['order_details'] as $order) {
        echo "订单编号:" . $order['item_order'] . "<br>";
        echo "收货地址:" . $order['address'] . "<br>";
        echo "联系电话:" . $order['contact'] . "<br>";
        echo "订单总价:" . $order['total_price'] . "<br>";
        echo "下单时间:" . $order['order_place'] . "<br>";
        echo "--- 订单菜品 ---<br>";

        // 第二层:遍历当前订单下的菜单
        if (isset($order['menu']) && is_array($order['menu'])) {
            foreach ($order['menu'] as $menuItem) {
                echo "菜品名称:" . $menuItem['menu_name'] . "<br>";
                echo "菜品价格:" . $menuItem['item_amt'] . "<br>";
                echo "--- 菜品配料 ---<br>";

                // 第三层:遍历当前菜品下的配料
                if (isset($menuItem['Ingredients']) && is_array($menuItem['Ingredients'])) {
                    foreach ($menuItem['Ingredients'] as $ingredient) {
                        echo "配料名称:" . $ingredient['ingredients_name'] . "<br>";
                        echo "配料价格:" . $ingredient['ingredients_price'] . "<br>";
                    }
                }
                echo "----------------<br>";
            }
        }
        echo "================<br>";
    }
}

代码说明

  • 每一层遍历前都用isset()和is_array()做了判断,避免数组不存在或者不是数组的时候报错,这是个好习惯哦~
  • 第一层foreach遍历所有订单,拿到每个订单的基础信息(地址、总价这些)
  • 第二层foreach遍历当前订单里的所有菜品
  • 第三层foreach遍历当前菜品里的所有配料

这样运行下来,就能把数组里的每一层数据都遍历输出啦!

内容的提问来源于stack exchange,提问作者user9640637

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:56:30