You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动