You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter中获取多维数组中所有相同的最值元素

解决方案:PHP获取多维数组中指定字段的所有最值元素

没问题,我来给你梳理一个实用的PHP方案,完全匹配你想要的效果——不管是找指定字段的最小值还是最大值,只要有多个元素共享这个最值,都会被筛选出来。

先看你的原始数组

首先把你的示例数组整理成标准PHP格式:

$originalArray = [
    ['label' => 'Ai', 'male' => 0, 'female' => 10],
    ['label' => 'Bi', 'male' => 0, 'female' => 20],
    ['label' => 'Ci', 'male' => 10, 'female' => 20],
];

通用函数实现(推荐)

我写了一个通用函数,支持指定字段、选择取最大值还是最小值,还能自定义返回的字段结构:

function getExtremeValueItems(array $array, string $field, bool $isMax = false): array
{
    // 第一步:提取目标字段的所有值,用来确定最值
    $fieldValues = array_column($array, $field);
    
    // 第二步:根据需求获取最大值或最小值
    $extremeValue = $isMax ? max($fieldValues) : min($fieldValues);
    
    // 第三步:筛选出所有字段值等于最值的元素
    $matchedItems = array_filter($array, function($item) use ($field, $extremeValue) {
        return $item[$field] === $extremeValue;
    });
    
    // 第四步:按需调整返回的字段结构(这里只保留label和目标字段)
    $formattedItems = array_map(function($item) use ($field) {
        return [
            'label' => $item['label'],
            $field => $item[$field]
        ];
    }, $matchedItems);
    
    // 重置数组索引,让结果更规整
    return array_values($formattedItems);
}

调用示例

比如你要获取male字段的所有最小值元素,直接调用:

$maleMinItems = getExtremeValueItems($originalArray, 'male');
print_r($maleMinItems);

输出结果就是你期望的:

Array
(
    [0] => Array
        (
            [label] => Ai
            [male] => 0
        )

    [1] => Array
        (
            [label] => Bi
            [male] => 0
        )

)

如果要找female字段的最大值元素(Bi和Ci的female都是20),只需要把第三个参数设为true:

$femaleMaxItems = getExtremeValueItems($originalArray, 'female', true);
print_r($femaleMaxItems);

输出会是:

Array
(
    [0] => Array
        (
            [label] => Bi
            [female] => 20
        )

    [1] => Array
        (
            [label] => Ci
            [female] => 20
        )

)

函数逻辑说明

  • array_column:快速提取目标字段的所有值,避免手动遍历找最值
  • max/min:直接获取字段的最值,简单高效
  • array_filter:筛选出所有符合最值条件的元素
  • array_map:自定义返回的字段结构(如果需要保留原数组的所有字段,删掉这一步即可)
  • array_values:重置数组索引,让结果数组的索引从0开始连续排列

简化版(针对单一需求)

如果只是临时处理male最小值的场景,也可以用简化写法:

// 提取male字段的所有值
$maleValues = array_column($originalArray, 'male');
// 找到male的最小值
$minMaleValue = min($maleValues);
// 筛选并整理结果
$result = array_values(array_filter(array_map(function($item) use ($minMaleValue) {
    return $item['male'] === $minMaleValue ? ['label' => $item['label'], 'male' => $item['male']] : null;
}, $originalArray)));

print_r($result);

这个写法和通用函数的效果完全一致,只是没有封装成通用函数而已。

内容的提问来源于stack exchange,提问作者Himawan Sandhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:07:37