PHP关联数组定义时如何引用同数组内已声明的键对应的值
实现方案
PHP不支持在数组定义过程中直接引用同层级未完成赋值的键值,你可以通过以下几种方式实现需求,优先推荐第一种,能最大程度减少重复查询:
方案1:提前提取查询结果(性能最优)
仅执行1次数据库查询,同时避免重复取值:
// 注意:建议你把查询用的集合变量和最终数组变量分开命名避免覆盖,这里示例用$sensorThresholdQuery代表原查询对象 $phData = $sensorThresholdQuery->where('name', 'Ph')->last(); $minPh = $phData->min_threshold ?? 0; $maxPh = $phData->max_threshold ?? 0; $sensorThreshold = [ 'ph' => [ 'minPh' => $minPh, 'maxPh' => $maxPh, 'sum' => $minPh + $maxPh, ] ];
方案2:数组定义后追加sum字段
如果你不想提前定义太多临时变量,可以先写完基础数组后追加sum值:
$sensorThreshold = [ 'ph' => [ 'minPh' => $sensorThresholdQuery->where('name', 'Ph')->last()->min_threshold ?? 0, 'maxPh' => $sensorThresholdQuery->where('name', 'Ph')->last()->max_threshold ?? 0, ] ]; // 直接引用已完成赋值的同层级字段计算sum $sensorThreshold['ph']['sum'] = $sensorThreshold['ph']['minPh'] + $sensorThreshold['ph']['maxPh'];
方案3:使用立即执行匿名函数(IIFE)
PHP7.4及以上版本支持用箭头函数写IIFE,把所有逻辑收拢在数组定义内部:
$sensorThreshold = [ 'ph' => (fn($phData) => [ 'minPh' => $min = $phData->min_threshold ?? 0, 'maxPh' => $max = $phData->max_threshold ?? 0, 'sum' => $min + $max, ])($sensorThresholdQuery->where('name', 'Ph')->last()) ];
注意:你原代码中查询对象和最终数组都用了
$sensorThreshold命名,会导致数组覆盖查询对象造成后续报错,建议调整两个变量的命名做区分。
内容的提问来源于stack exchange,提问作者Biswajit Biswas
相关产品推荐
相关产品推荐

