【问题标题】:codeigniter - get all the same min or max value in multi-dimension array [closed]codeigniter - 在多维数组中获取所有相同的最小值或最大值 [关闭]
【发布时间】:2020-01-30 11:41:13
【问题描述】:

我有一个多维数组:

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)
        }

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

【问题讨论】:

  • ...从该数组中获取最大值和最小值..哪个键的值?
  • 最小值和最大值是什么意思?
  • 我没有看到编码尝试或明确的问题陈述。
  • @mickmackusa 很抱歉没有进行编码,因为我使用了人们经常使用的常用函数来获取数组中的最大值或最小值,所以这就是为什么我认为当我输入我做了一个函数来获取最大值或最小值
  • 主要问题是如果数组中有 2 个最小值,例如 0 和 0,输出将只有 1 个值,我想得到这 2 个值,数组中的 0 和 0 或根据数组中有多少最小值获得所有相同的最小值

标签: php codeigniter multidimensional-array


【解决方案1】:

使用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

【讨论】:

  • @AnantSingh---AlivetoDie 这个答案是最好的解决方案之一,谢谢
  • @HimawanSandhi 很高兴为您提供帮助:)
【解决方案2】:

您可以使用具有 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;
}

Demo

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

编辑

根据that post进行小代码优化

【讨论】:

  • 请抑制对研究不足和未尝试的问题发布答案的冲动。即使此页面被编辑为 Clear/Complete,它也肯定是重复的。
  • @mickmackusa,OP 说 例如,我想获得男性的最小值。我在这里没有看到关于欺骗的链接。是的,没有研究过。我不明白你为什么认为它根本不清楚。
  • 阅读前面同一句话的要求。 OP 做了一个函数,但它究竟做了什么是模棱两可的/可以解释的。阅读问题下其他用户的 cmets - 我不是唯一一个发现这个问题描述不佳的人。 如果我想得到所有怎么办​​这是否意味着不分性别?或者这是否意味着将男性/女性分开并仅仅收集它们?
  • 是的,但对于他的情况,有必要知道gender 和(minmaxvalue from his function)。为什么需要使用两个功能而不是唯一一个?可能在一行代码中获得值。好的,你可以管理比我更多的 SO 功能,这就是为什么即使我说了这么多你也是对的
  • 我们不知道“他的案子”——太模糊了。我并不是说你不应该帮助别人,但如果志愿者回答应该关闭的问题,那么问题的质量不会随着时间的推移而提高。我恳求你,因为我不能 24/7 在这里做志愿者,“定期/频繁的志愿者需要合作来改进这里的内容,因为我们人数众多。
猜你喜欢
  • 2011-05-28
  • 2012-06-24
  • 2021-12-03
  • 1970-01-01
  • 2021-07-30
  • 2014-05-10
  • 2017-11-03
  • 2015-04-22
  • 1970-01-01
相关资源
最近更新 更多