PHP中基于指定数组从多维数组获取最大值的问题
解决从指定分类ID数组中找出最高价格项的问题
看起来你已经尝试了排序,但可能漏掉了先筛选出目标分类ID对应的项这一步,我来帮你梳理完整的解决方案:
步骤1:筛选出符合条件的分类项
首先我们需要从$categories中,只保留category_id存在于$catids数组里的元素,用array_filter就能轻松实现:
$catids = [239,240,238]; $categories = [ ['category_id' => 239, 'final_price' => 1999], ['category_id' => 238, 'final_price' => 2990], ['category_id' => 240, 'final_price' => 3500], ['category_id' => 241, 'final_price' => 500] ]; // 筛选出category_id在$catids中的项 $filtered = array_filter($categories, function($item) use ($catids) { return in_array($item['category_id'], $catids); });
步骤2:找出筛选后数组中价格最高的项
这里有两种常用方法,你可以根据需求选择:
方法一:基于排序实现(直观易懂)
用你熟悉的usort对筛选后的数组按final_price升序排序,排序完成后最后一个元素就是价格最高的项:
// 按final_price升序排序 usort($filtered, function($a, $b) { return $a['final_price'] <=> $b['final_price']; }); // 获取最后一个元素即为最高价格项 $maxItem = end($filtered);
方法二:遍历直接记录(效率更高)
如果你的数组元素很多,排序的性能开销会比遍历大,这时候可以直接遍历筛选后的数组,实时记录当前价格最高的项:
$maxPrice = -1; $maxItem = null; foreach ($filtered as $item) { if ($item['final_price'] > $maxPrice) { $maxPrice = $item['final_price']; $maxItem = $item; } }
最终结果
两种方法最终得到的$maxItem都是你预期的结果:
Array ( [category_id] => 240 [final_price] => 3500 )
顺便提一句,你之前的代码没有做筛选,会把category_id=241的项也包含进去,虽然它的价格不影响最终最大值,但筛选能让逻辑更严谨,也能减少后续处理的数据量~
内容的提问来源于stack exchange,提问作者user




