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
相关产品推荐
相关产品推荐

