首页 > 编程语言 >php 对空数组元素??并进行运算,可能触发 Undefined index 错误

php 对空数组元素??并进行运算,可能触发 Undefined index 错误

时间:2024-11-29 17:23:12浏览次数:7  
标签:index Undefined unshipped qty TotalGb php stock

对空数组元素??并进行运算,可能触发 Undefined index 错误

$TotalGb = $TotalGroupBrand[$brandNameEn] ?? [];
$quantity = $TotalGb['stock'] ?? 0 + $TotalGb['unshipped_qty'] ?? 0;"

#报错:Undefined index: unshipped_qty",

代码中的错误 "Undefined index: unshipped_qty" 是由于 PHP 的 ?? 空合并运算符没有对数组键的存在性进行深层次处理,在嵌套访问时仍然可能触发 Undefined index 错误。

以下是问题的具体原因和解决办法:

问题分析

代码中的 $TotalGb['unshipped_qty'] ?? 0 虽然能处理键不存在的情况,但在 PHP 中访问一个不存在的数组键时会先尝试访问该键,从而抛出 Undefined index 错误。

解决方案

1、逐步检查键是否存在: 通过 isset() 先检查键是否存在,然后进行运算,确保安全访问:

$TotalGb = $TotalGroupBrand[$brandNameEn] ?? [];
$stock = isset($TotalGb['stock']) ? $TotalGb['stock'] : 0;
$unshippedQty = isset($TotalGb['unshipped_qty']) ? $TotalGb['unshipped_qty'] : 0;
$quantity = $stock + $unshippedQty;

2、利用 array_key_exists() 检查键: 如果数组可能包含 null 值并且你需要严格区分键不存在和值为 null 的情况,可以用 array_key_exists():

$stock = array_key_exists('stock', $TotalGb) ? $TotalGb['stock'] : 0;
$unshippedQty = array_key_exists('unshipped_qty', $TotalGb) ? $TotalGb['unshipped_qty'] : 0;
$quantity = $stock + $unshippedQty;

3、重构运算逻辑: 使用 array_reduce() 等函数对数组的键值进行统一处理,避免直接访问:

$quantity = ($TotalGb['stock'] ?? 0) + ($TotalGb['unshipped_qty'] ?? 0);

4、PHP 8+ 的 null 安全运算符(推荐): 如果你的 PHP 版本是 8.0 或更高,可以使用 ?? 和 null 安全运算符 ?->,安全地访问深层次的键值:

$quantity = ($TotalGroupBrand[$brandNameEn]['stock'] ?? 0) + ($TotalGroupBrand[$brandNameEn]['unshipped_qty'] ?? 0);

5、推荐代码(综合方案):
如果你希望代码简洁,且不依赖特定的 PHP 版本,可以这样写:

$TotalGb = $TotalGroupBrand[$brandNameEn] ?? [];
$quantity = ($TotalGb['stock'] ?? 0) + ($TotalGb['unshipped_qty'] ?? 0);

这样可以避免直接访问导致的未定义索引错误,同时保持可读性和简洁性。

标签:index,Undefined,unshipped,qty,TotalGb,php,stock
From: https://www.cnblogs.com/pine007/p/18577156

相关文章

  • 我后悔之前不知道的 7 个 PHP 函数
    如果您是一位经验丰富的PHP开发人员,您可能会感觉自己已经做到了这一点。您开发了大量的应用程序,调试了数百万个几行代码,并调整了一堆脚本以实现最佳效果但是时不时地,你会遇到一个函数,让你问,“我怎么不知道这个?”这里有七个鲜为人知的PHP函数,我希望我能学会早先。1.array......
  • zblogphp设置404页面的最新方法
    操作步骤:新建一个 404.php 文件,复制以下代码:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="......
  • 使用phpMyAdmin导入和恢复大体积SQL文件
    修改 config.inc.php 文件找到phpMyAdmin的 config.inc.php 文件。添加或修改以下配置:$cfg['UploadDir']='ImportSQLFile';$cfg['SaveDir']='ExportSQLFile';UploadDir 用于导入文件,SaveDir 用于导出文件。创建文件夹在phpMyAdmin根目录下创建......
  • Llamaindex中的聊天记录存储和记忆memory使用教程
    聊天存储(ChatStore)聊天存储(ChatStore)作为一个集中的接口,用于存储您的聊天记录。聊天历史与其他存储格式相比具有独特性,因为消息的顺序对于维持整个对话非常重要。聊天存储可以通过键(如用户ID或其他唯一标识字符串)来组织一系列的聊天消息,并处理删除、插入和获取等操作。......
  • Y20030012基于php+mysql的药店药品信息管理系统的设计与实现 源码 配置 文档
    库存管理系统1.摘要2.系统功能3.功能结构图4.界面展示5.源码获取1.摘要21世纪是信息的时代,信息技术发展突飞猛进。各种信息化管理系统如雨后春笋一样出现。Internet的迅猛发展使其成为全球信息传递与共享的巨大的资源库。越来越多的网络环境下的Web应用系统被建立起......
  • ThinkPHP日志记录
    ThinkPHP的日志功能记录参数Controllerusethink\facade\Log;publicfunctionindex(){//获取请求参数$params=request()->param();//获取所有参数(GET、POST、PUT等)//打印参数到日志Log::info('接口请求参数:'.json_encode($params));//......
  • MySQL 索引覆盖(Covering Index)
    MySQL索引覆盖(CoveringIndex)是一种优化查询性能的技术,指的是查询所需的所有列的数据都能够从索引中获取,不需要再回表查询数据。 1.索引覆盖的概念覆盖索引(CoveringIndex)是一种索引,它包含了SQL查询中涉及的所有列(包括查询列和条件列),不需要额外访问数据表即可完成查询......
  • 0day 通达OA前台adown.php存在未授权访问信息泄露漏洞
      0x01产品概述    0day通达OA前台adown.php存在未授权访问信息泄露漏洞通用描述管理和发布于一体的智能化平台,广泛应用于新闻、媒体和各类内容创作机构。该平台支持多终端、多渠道的内容分发,具备素材管理、编辑加工、智能审核等功能,通过AI技术辅助内容创作与数据......
  • 最新毕设-SpringBoot-共享自习室管理系统-20672(免费领项目)可做计算机毕业设计JAVA、PH
    摘要随着现代社会竞争压力的增加以及学习需求的提升,学生们对于高效自习场所的需求日益增长。而基于springboot的共享自习室管理系统的设计与实现将为学生提供一个便捷、高效的共享自习环境,提升学生自习效率和体验。该系统可以为学生们提供在线讲座的渠道,实现在线进行预约位置......
  • IndexedDB
    IndexedDB简介MDN官网是这样解释IndexedDB的:IndexedDB是一种底层API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs))。该API使用索引实现对数据的高性能搜索。虽然WebStorage在存储较少量的数据很有用,但对于存储更大量的结构化数据来说力不从心。而I......