在多维数组中获取所有相同的最小值或最大值



我有一个多维数组:

array(3) {
[0]=> array(3) {
["label"]=> string(2) "Ai"
["male"]=> int(0)
["female"]=> int(10) 
}
[1]=> array(3) {
["label"]=> string(2) "Bi"
["male"]=> int(0)
["female"]=> int(20) 
}
[2]=> array(3) {
["label"]=> string(2) "Ci"
["male"]=> int(10)
["female"]=> int(20) 
}

我想获得所有相同的最大值或所有相同的最小值,我的意思是如果数组中有 2 个或更多相同的最大值或最小值,例如,我想像这样为男性获取所有相同的最小值:

array(2) {
[0]=> array(3) {
["label"]=> string(2) "Ai"
["male"]=> int(0)
}
[1]=> array(3) {
["label"]=> string(2) "Bi"
["male"]=> int(0)
}

任何解决方案将不胜感激,谢谢

使用array_column()foreach()来获得所需的结果:

$min =  min(array_column($array,'male'));//get min values from array for male
$keys = array_keys(array_column($array,'male'), $min); // get all index which have min values for male
$finalArray =[]; 
foreach($keys as $key){ // iterate over indexes
$finalArray[] = array(
'label'=>$array[$key]['label'],
'male'=>$array[$key]['male']
); //assign values to new array
}
print_r($finalArray); //print Array

输出:https://3v4l.org/DSfFK

使用不同列获取所有最小最大值的功能方法如下所示:

function getMinMaxFromArray($array,$type,$columnToChoseForMinMax){
if($type =='min'){
$min =  min(array_column($array,$columnToChoseForMinMax));
$keys = array_keys(array_column($array,$columnToChoseForMinMax), $min);
}
if($type =='max'){
$max =  max(array_column($array,$columnToChoseForMinMax));
$keys = array_keys(array_column($array,$columnToChoseForMinMax), $max);
}
$finalArray =[]; 
foreach($keys as $key){
$finalArray[] = array(
'label'=>$array[$key]['label'],
'male'=>$array[$key]['male']
);
}
return $finalArray;
}
print_r(getMinMaxFromArray($array,'min','male'));
print_r(getMinMaxFromArray($array,'max','male'));
print_r(getMinMaxFromArray($array,'min','female'));
print_r(getMinMaxFromArray($array,'max','female'));

输出:https://3v4l.org/E38gV

您可以使用具有 3 个输入参数的函数$data arraymaxmin、性别malefemale

function getMinMaxGen($data,$minmax,$gen){
$res = ['value' => 0,'sets' => []];  // default result
// get min or max value
if(in_array($minmax,['min','max'])){
$arcol = array_column($data,$gen);      
$res['value'] = $minmax($arcol);
}
// get sets of labels which has defined min or max value
if(in_array($gen,['male','female'])){
foreach($data as $person){
if ($person[$gen] === $res['value']) $res['sets'][] = ['label' => $person['label'], "$gen" => $person[$gen]];
}
} 
return $res;
}

演示

现在,您可以检索任何集合。 使用$result['sets']

编辑

根据该帖子进行小代码优化

相关内容

  • 没有找到相关文章

最新更新