
本文档旨在指导开发者如何使用PHP处理多维数组,并根据多个条件(如Taxable属性和Total_Sell值的正负)对数组中的数据进行聚合。我们将通过一个实际案例,详细讲解如何根据VendorId对数据进行分类汇总,最终生成包含不同条件下的总额信息的数组。
在实际的PHP开发中,经常会遇到需要处理复杂的多维数组,并根据特定的业务逻辑对数据进行聚合的情况。 本教程将通过一个具体的示例,演示如何根据VendorId,以及Taxable属性和Total_Sell值的正负,对一个多维数组进行聚合。
数据结构
首先,我们假设有如下的数据结构(JSON格式):
立即学习“PHP免费学习笔记(深入)”;
{ "PurchaseOrders": [ { "PurchaseOrderId": "9809ae4b-3123-4799-8549-9edc09105188", "VendorId": "b0ddcf4d-894e-4ffc-ab99-e71676d1a566", "PONumber": "9999791", "ReceivedDate": null, "POSentDate": null } ], "SubLineItems": [ { "SubLineItemId": "0f349da9-8b25-4ec5-9b5a-e9d0d90d11cd", "ItemTypeCode": 0, "ItemTypeDescription": "Normal", "VendorId": "b0ddcf4d-894e-4ffc-ab99-e71676d1a566", "PurchaseOrderId": "9809ae4b-3123-4799-8549-9edc09105188", "FreightDataId": null, "Quantity": 1, "SellPrice": 353.440150801131, "SellTotal": 503.44, "FreightSell": 150.0, "InstallationSell": 0.0, "NetPrice": 750.0, "FreightNet": 100.0, "Taxable": true, "Total_Sell": 503.44 }, { "SubLineItemId": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "ItemTypeCode": 0, "ItemTypeDescription": "Normal", "VendorId": "b0ddcf4d-894e-4ffc-ab99-e71676d1a566", "PurchaseOrderId": "9809ae4b-3123-4799-8549-9edc09105188", "FreightDataId": null, "Quantity": 1, "SellPrice": -100.00, "SellTotal": -100.00, "FreightSell": 0.0, "InstallationSell": 0.0, "NetPrice": -100.00, "FreightNet": 0.0, "Taxable": false, "Total_Sell": -100.00 } ]}
其中,我们主要关注SubLineItems数组,它包含了多个子项,每个子项都有VendorId,Taxable,Total_Sell等属性。 我们的目标是根据VendorId,将SubLineItems按照Taxable和Total_Sell的正负进行聚合,生成一个新的数组,包含每个Vendor在不同条件下的总额。
实现代码
以下是实现上述功能的PHP代码:
$item['FreightSell'], // Initial FreightSell, can be overwritten later. 'Total_Taxable' => 0, 'Total_Credit_Taxable' => 0, 'Total_NonTaxable' => 0, 'Total_Credit_NonTaxable' => 0, ]; } if ($item['Taxable'] && $item['Total_Sell'] > 0) { $arr_vendor_totals[$vendor_id]['Total_Taxable'] += $item['Total_Sell']; } elseif ($item['Taxable'] && $item['Total_Sell'] 0) { $arr_vendor_totals[$vendor_id]['Total_NonTaxable'] += $item['Total_Sell']; } elseif (!$item['Taxable'] && $item['Total_Sell'] < 0) { $arr_vendor_totals[$vendor_id]['Total_Credit_NonTaxable'] += abs($item['Total_Sell']); // Use abs() to store positive value }}echo "";print_r($arr_vendor_totals);echo "
";?>
代码解释
IT教育培训机构单页模板
1、IT行业里其实有很多细分领域和工种,领域如云计算、游戏、电商、大数据、金融IT、智能硬件等,工种如开发、运维、测试、产品经理、项目经理、UI设计、数据分析师等,到底学哪个好?根据自身特长 爱好 2、虽然有很多细分领域,但是不是每个领域都适合你,比如像人工智能、VR开发等相比偏难一些的领域,我不觉得适合无计算机专业背景的小白学习,至少不应该做为初始的学习目标,因为这些领域涉及到计算机里各种复
54 查看详情
数据准备: 首先,我们使用json_decode函数将JSON字符串转换为PHP数组。然后,我们提取SubLineItems数组,并初始化一个空数组$arr_vendor_totals,用于存储聚合后的数据。
循环遍历: 我们使用foreach循环遍历$arr_sublineitems数组,对于每个子项,我们首先获取VendorId。
判断VendorId是否存在: 使用array_key_exists检查当前VendorId是否已经存在于$arr_vendor_totals数组中。如果不存在,则创建一个新的数组,并初始化各个总额为0。 同时,将FreightSell初始化,这个值会被后续的FreightSell覆盖,最终保留最后一个FreightSell。
条件判断和聚合: 根据Taxable属性和Total_Sell值的正负,使用if-elseif语句判断子项所属的类别,并将Total_Sell的值累加到对应的总额中。 对于Total_Sell小于0的情况,我们使用abs()函数取绝对值,以便存储正数。
输出结果: 最后,我们使用print_r函数打印$arr_vendor_totals数组,查看聚合后的结果。
注意事项
数据类型: 确保Total_Sell是数值类型,如果不是,需要先进行类型转换,例如使用(float)$item[‘Total_Sell’]。错误处理: 在实际应用中,应该添加错误处理机制,例如检查JSON数据是否有效,以及处理可能出现的异常情况。性能优化: 对于大型数组,可以考虑使用更高效的算法,例如使用索引来加速查找。
总结
本教程详细讲解了如何使用PHP处理多维数组,并根据多个条件对数据进行聚合。 通过这个示例,你可以掌握如何根据实际业务需求,灵活地处理和分析复杂的数据结构。 在实际开发中,可以根据具体情况,调整代码逻辑,以满足不同的需求。
以上就是PHP多维数组:根据多重条件聚合数据的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/728465.html
微信扫一扫
支付宝扫一扫