5 分钟快速上手 BoxPackerComposer 安装与第一个 PHP 装箱程序完整教程【免费下载链接】BoxPacker4D bin packing / knapsack problem solver项目地址: https://gitcode.com/gh_mirrors/bo/BoxPacker想给电商订单自动计算需要多大的纸箱想省下每次手工测量、反复试装的精力BoxPacker正是你需要的 PHP 装箱程序库——它用4D 装箱问题求解算法同时考虑长、宽、高和重量四个维度帮你把一堆商品智能地塞进最合适的箱子里。本文手把手教你通过 Composer 安装 BoxPacker并在 5 分钟内跑通第一个装箱程序。BoxPacker 是什么为什么电商开发离不开它BoxPacker 是一个纯 PHP 实现的3D实为 4D装箱 / 背包问题求解器核心思路是给出一批商品含尺寸与重量它能自动计算需要多少个箱子、每个箱子装哪些商品。这对电商场景尤其有用 计算运费时直接得到箱子的尺寸和总重量️ 打印标签前确定需要打印多少张 评估包装成本避免大箱装小物的浪费官方文档对它的定位是尽可能无缝集成到你现有的系统中——你已有的商品实体可以直接塞进 Packer无需先构造库专属的数据结构。详见 docs/getting-started.rst。环境要求PHP 8.2 与 Composer在开始之前请确认你的环境满足两项硬性要求依赖版本要求说明PHP^8.2使用强类型、命名参数等现代语法Composer最新稳定版自动处理依赖下载与自动加载运行php -v和composer --version即可快速检查。完整依赖清单可参考 composer.json。一键安装步骤用 Composer 引入 BoxPacker安装过程只需一条命令。进入你的项目根目录执行composer require dvdoug/boxpackerComposer 会自动完成源码下载、依赖解析仅需psr/log和ext-json以及 autoload 配置装完即可use使用。如果你不想用 Composer也可以克隆源码仓库git clone https://gitcode.com/gh_mirrors/bo/BoxPacker安装细节与版本说明见 docs/installation.rst。认识两个核心接口Item 与 BoxBoxPacker 通过两个接口与你的业务对象解耦这也是无需改造成本的关键Item商品实现getDescription()、getWidth()、getLength()、getDepth()、getWeight()、getAllowedRotation()六个方法分别返回商品名称、长宽高毫米、重量克和允许的旋转方式。接口定义见 src/Item.php。Box箱子实现getReference()、getOuterWidth/Length/Depth()、getEmptyWeight()、getInnerWidth/Length/Depth()、getMaxWeight()等方法描述箱子的内外尺寸、皮重和承重上限。接口定义见 src/Box.php。 小提示旋转策略通过Rotation枚举控制比如Rotation::KeepFlat表示必须平放、Rotation::BestFit表示允许任意旋转详见 src/Rotation.php。第一个 PHP 装箱程序三步写出可运行示例下面用官方测试类TestBox/TestItem见 tests/Test/TestBox.php 与 tests/Test/TestItem.php写一个最小可运行示例完整逻辑与官方示例一致参考 docs/getting-started.rst。第一步创建 Packer 实例并添加箱子use DVDoug\BoxPacker\Packer; use DVDoug\BoxPacker\Test\TestBox; $packer new Packer(); $packer-addBox(new TestBox( reference: 小号箱, outerWidth: 300, outerLength: 300, outerDepth: 10, emptyWeight: 10, innerWidth: 296, innerLength: 296, innerDepth: 8, maxWeight: 1000 )); // 可继续 addBox 添加大号箱、中号箱等多个规格第二步添加待打包商品可指定数量use DVDoug\BoxPacker\Rotation; use DVDoug\BoxPacker\Test\TestItem; $packer-addItem(new TestItem( description: 商品A, width: 250, length: 250, depth: 12, weight: 200, allowedRotation: Rotation::KeepFlat ), qty: 2);第三步调用 pack() 并遍历结果$packedBoxes $packer-pack(); echo 共装进 . count($packedBoxes) . 个箱子 . PHP_EOL; foreach ($packedBoxes as $packedBox) { echo $packedBox-box-getReference() . 总重 . $packedBox-getWeight() . g . PHP_EOL; foreach ($packedBox-items as $packedItem) { echo - . $packedItem-item-getDescription() . PHP_EOL; } }pack()的核心逻辑在 src/Packer.php先做基础装箱若产生多个箱子还会自动调用WeightRedistributor均衡各箱重量。每个箱子的剩余空间、体积利用率等数据可通过PackedBox的getRemainingWeight()、getVolumeUtilisation()获取见 src/PackedBox.php。只判断能否装进一个箱子VolumePacker 的妙用如果你只想知道这批货能不能塞进某一只箱子里比如判断商品是否满足某快递箱规格无需遍历多个箱型直接用VolumePackeruse DVDoug\BoxPacker\ItemList; use DVDoug\BoxPacker\VolumePacker; $volumePacker new VolumePacker($box, $items); $packedBox $volumePacker-pack(); // $packedBox-items 即能装下的商品实现见 src/VolumePacker.php该类的单元测试可参考 tests/VolumePackerTest.php。进阶功能速览从重量均衡到限量箱子跑通第一个程序后你还可以按需解锁这些能力⚖️重量均衡多箱时自动重新分配商品让各箱重量更均匀默认最多平衡 12 个箱子可用setMaxBoxesToBalanceWeight()调整可视化调用generateVisualisationURL()生成在线 3D 装箱预览链接直观检查摆放效果限量供应箱子通过LimitedSupplyBox指定每种箱子的可用数量见 src/LimitedSupplyBox.php⏱️超时控制通过setTimeoutChecker()设置求解超时避免复杂场景卡死自定义约束自定义BoxSorter、ItemSorter改变装箱启发式策略实现先装重的优先大箱等业务规则以上能力对应的测试用例在 tests/PackerTest.php 与 tests/EfficiencyTest.php 中都有完整演示照着读一遍就能举一反三。小结至此你已掌握了 BoxPacker 的 Composer 安装方法、核心接口概念和第一个 PHP 装箱程序的完整写法。从电商运费计算到仓库打包优化这个轻量级库都能帮你把装多少、装哪里、多重算得明明白白。下一步不妨把TestBox/TestItem替换成你数据库里的真实商品与纸箱模型让装箱自动化立刻上线【免费下载链接】BoxPacker4D bin packing / knapsack problem solver项目地址: https://gitcode.com/gh_mirrors/bo/BoxPacker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考