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
相关产品推荐
相关产品推荐

