上一篇
"这订单数据怎么像俄罗斯套娃一样层层嵌套啊!" 小张盯着屏幕抓狂,他正在处理一个电商平台的订单报表,每个订单包含多个商品,每个商品又有规格、价格、库存等属性,单层数组就像只装水果的篮子,而现实数据更像是一个精致的礼盒——外盒是订单,打开后是排列整齐的商品小盒,每个小盒里还有更精细的分装。
别担心!PHP多维数组就是专门解决这种"套娃式"数据结构的神器,让我们一起来探索它的奇妙世界吧!🚀
简单说就是"数组中的数组",就像Excel表格,工作表里有多个表格,每个表格又有行和列:
// 二维数组就像一张成绩单表格 $scoreTable = [ ["张三", 95, 88], // 第一行 ["李四", 76, 92], // 第二行 ["王五", 88, 85] // 第三行 ];
// 方式1:直接字面量声明 $menu = [ "主食" => ["米饭", "面条", "馒头"], "荤菜" => ["红烧肉", "清蒸鱼"], "素菜" => ["炒青菜", "麻婆豆腐"] ]; // 方式2:逐步构建 $company["IT部"] = ["开发组", "测试组"]; $company["人事部"] = ["招聘组", "培训组"]; // 方式3:动态生成(比如从数据库查询结果构造) $products = []; while ($row = mysqli_fetch_assoc($result)) { $products[] = $row; }
echo $menu["荤菜"][1]; // 输出:清蒸鱼 echo $scoreTable[2][0]; // 输出:王五
// 添加新菜品 $menu["汤类"][] = "紫菜蛋汤"; // 自动数字索引 $menu["主食"][3] = "饺子"; // 指定位置 // 添加新部门 $company["财务部"] = ["会计组", "出纳组"];
$menu["素菜"][1] = "鱼香茄子"; // 把麻婆豆腐换成鱼香茄子 $scoreTable[1][2] = 95; // 修改李四的第二科成绩
unset($menu["主食"][0]); // 移除米饭 unset($company["人事部"]); // 解散整个人事部
// 双层foreach遍历 foreach ($menu as $category => $items) { echo "📌 $category:\n"; foreach ($items as $index => $dish) { echo " - {$index}. {$dish}\n"; } } // 带索引的for循环(适合需要位置信息的场景) for ($i = 0; $i < count($scoreTable); $i++) { echo "第".($i+1)."名学生:"; for ($j = 0; $j < count($scoreTable[$i]); $j++) { echo $scoreTable[$i][$j]." "; } echo "\n"; }
// 按主食名称排序 array_multisort($menu["主食"], SORT_ASC, SORT_STRING); // 按学生第二科成绩降序排列 array_multisort(array_column($scoreTable, 2), SORT_DESC, $scoreTable);
// 搜索有没有红烧肉 $searchDish = "红烧肉"; foreach ($menu as $category => $items) { if (in_array($searchDish, $items)) { echo "找到啦!{$searchDish}在{$category}分类\n"; break; } } // 使用array_search更精准定位 $position = array_search("清蒸鱼", $menu["荤菜"]); echo "清蒸鱼在荤菜类的第{$position}个位置";
让我们用多维数组构建一个简易订单系统:
// 订单数据 $orders = [ "ORD202507001" => [ "customer" => "张三", "date" => "2025-07-15", "items" => [ ["product" => "无线耳机", "price" => 299, "qty" => 1], ["product" => "手机壳", "price" => 39, "qty" => 2] ], "status" => "已发货" ], "ORD202507002" => [ "customer" => "李四", "date" => "2025-07-16", "items" => [ ["product" => "智能手表", "price" => 899, "qty" => 1] ], "status" => "待付款" ] ]; // 计算订单总金额 function calculateTotal($order) { $total = 0; foreach ($order["items"] as $item) { $total += $item["price"] * $item["qty"]; } return $total; } // 添加新订单 $newOrder = [ "customer" => "王五", "date" => "2025-07-17", "items" => [ ["product" => "充电宝", "price" => 129, "qty" => 1], ["product" => "数据线", "price" => 29, "qty" => 3] ], "status" => "已付款" ]; $orders["ORD202507003"] = $newOrder; // 输出订单摘要 foreach ($orders as $orderNo => $order) { echo "📦 订单号:{$orderNo}\n"; echo "👤 客户:{$order['customer']}\n"; echo "💰 总金额:" . calculateTotal($order) . "元\n"; echo "🔄 状态:{$order['status']}\n\n"; }
SplFixedArray
unset()
不再需要的子数组// 陷阱1:错误的维度访问 // $menu["不存在的分类"][0] 会导致Notice错误 // 正确做法:先检查 isset($menu["不存在的分类"]) // 陷阱2:意外的引用传递 $arr1 = [1, 2]; $arr2 = [3, 4]; $matrix = [$arr1, $arr2]; $arr1[0] = 100; // 不会改变$matrix中的值 // 除非显式使用引用 $matrix = [&$arr1, $arr2]; $arr1[0] = 100; // 现在会改变$matrix[0][0]
// 数组转JSON $jsonData = json_encode($orders, JSON_PRETTY_PRINT); // JSON转回数组 $decodedArray = json_decode($jsonData, true); // 注意第二个参数
// 使用展开运算符... $departments = [...$company["IT部"], ...$company["人事部"]]; // 箭头函数简化处理 $discountItems = array_filter($orders, fn($order) => calculateTotal($order) > 500);
PHP多维数组就像编程世界里的乐高积木🧩,简单的概念却能构建出无限可能的数据结构,从处理配置数据、表单提交,到构建复杂的业务模型,多维数组都是PHP开发者不可或缺的工具,好的数据结构设计能让代码更清晰、逻辑更简单!
下次当你遇到复杂数据时,不妨先画个树状图,然后愉快地用多维数组来实现它吧!记得保持代码可读性,适当添加注释说明数组结构哦~ ✨
本文技巧基于PHP 8.3环境验证,适用于2025年主流开发场景,随着PHP语言发展,部分语法可能会有更优雅的写法,但多维数组的核心概念将长期适用。
本文由 百里向梦 于2025-07-31发表在【云服务器提供商】,文中图片由(百里向梦)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/498342.html
发表评论