PHP:如何从多维关联数组中获取最大值对应的键?
如何获取多维数组中最大值对应的元素键?
你遇到的问题根源很清晰:array_keys()在这里无法生效,是因为你的articles数组里的每个元素都是独立的关联数组,而max(array_column(...))得到的是单个数值(比如25)。array_keys()会去查找数组中值完全等于这个数值的键,但你的数组元素都是数组类型,自然找不到匹配项,所以返回空数组。
下面给你两种无需手动遍历收集值的简洁实现方法:
方法一:用array_reduce跟踪最大值与对应键
这个方法可以在一次遍历中完成最大值和对应键的查找,逻辑清晰且高效:
foreach($resultCache as $s => $r){ $maxInfo = array_reduce($r['articles'], function($carry, $item, $key) { // 初始状态或当前元素值更大时,更新记录的键和值 if ($carry === null || $item['shipping_costs_total'] > $carry['value']) { return ['key' => $key, 'value' => $item['shipping_costs_total']]; } return $carry; }); // 最终$maxInfo['key']就是你要的目标键(示例中为0) echo "当前分组下最大值对应的键:" . $maxInfo['key']; }
如果存在多个元素的shipping_costs_total等于最大值,这个方法会返回最后一个遇到的最大值的键,你可以把比较符号改成>=来调整为返回第一个。
方法二:结合array_column与array_search
这个方法更简洁,利用array_column保留原数组键的特性:
foreach($resultCache as $s => $r){ // 提取所有shipping_costs_total值,同时保留原数组的键 $shippingCosts = array_column($r['articles'], 'shipping_costs_total'); // 获取最大值 $maxValue = max($shippingCosts); // 查找最大值对应的第一个键 $maxKey = array_search($maxValue, $shippingCosts); echo "当前分组下最大值对应的键:" . $maxKey; }
注意:如果有多个相同的最大值,array_search只会返回第一个匹配的键,这是它的默认行为。
内容的提问来源于stack exchange,提问作者Dwza
相关产品推荐
相关产品推荐

