我有一个多维数组:
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 array
、max
或min
、性别male
或female
:
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']
编辑
根据该帖子进行小代码优化