【问题标题】:PHP finding duplicates in array and create another array with 1st column as value and another avgPHP在数组中查找重复项并创建另一个数组,第一列作为值,另一个平均值
【发布时间】:2017-11-11 03:29:07
【问题描述】:

我可以请求指导如何在 PHP 中查找数组中的重复项并创建另一个数组,其中第 1 列作为重复项的值,其他列作为第 1 列值相同(重复)的其他列的加法或平均值 例如。 X 列为 1、2、3、1、2 Y 列 10、20、30、50、70

我们想在另一个新表中创建一个数组或插入值

A 列为 1、2、3,B 列为 60、90、30

And(重复的平均值) 与

A 列为 1、2、3,B 列为值 30、45 和 30

提前致谢

【问题讨论】:

  • 欢迎 StackOverflow。你必须先做一些研究,尝试一些东西,努力争取,然后在一个特定的问题上陷入困境。然后发布该问题,我们会帮助您解决问题。但 SO 不是代码编写服务。阅读这些:stackoverflow.com/help/mcvestackoverflow.com/help/how-to-ask

标签: php mysql arrays


【解决方案1】:

用一个检查来做一个简单的循环来做相似值的总和,然后另一个循环来做平均值。

$new = array();
$temp = array();
foreach($x as $key=> $value){
   if(isset($temp[$value])){
    $new[$value][1] += $y[$key];
    $new[$value][0] +=1;
  }else{
    $new[$value][1] = $y[$key];
    $new[$value][0] = 1;
    $temp[$value] = $key;
  }
}
$result = array();
foreach($new as $key=> $value){
     $result[$key]["total"] = $value[1];
     $result[$key]["average"] = $value[1]/ $value[0];
}

现场演示:https://eval.in/897817

【讨论】:

    【解决方案2】:
    $columnx= array (1,2,3,1,2);
    $columny= array (10,20,30,50,70);
    $columna= array();
    $columnbold= array();
    $columnb = array();
    for ($i = 0; $i<=(count($columnx) -1);$i++){
        $check=array_search($columnx[$i],$columna);
        if($check===FALSE){
            array_push($columna, $columnx[$i]);
            array_push($columnbold, $columny[$i]);
        } else {
            $columnbold[$check] .='-'.$columny[$i];
        }
    }
    foreach($columnbold as $a){
        $b= explode('-',$a);
        array_push($columnb, (array_sum($b)/count($b)));
    }
    
    var_dump($columna);
    echo "<br/>";
    var_dump($columnb);
    

    输出:-

    array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
    array(3) { [0]=> int(30) [1]=> int(45) [2]=> int(30) } 
    

    【讨论】:

    • 非常感谢,正在为同样的研发而苦苦挣扎。这是一个很好的解决方案,它奏效了。
    【解决方案3】:

    不确定我是否完全理解您想要什么,但我会以一种或另一种形式使用它

    $array1 = [
        1,
        2,
        3,
        4,
        5,
        1,
        4,
        'one',
        'one'
    ];
    
    $fequency = array_count_values($array1);
    
    print_r($fequency);
    

    输出

    Array
    (
        [1] => 2
        [2] => 1
        [3] => 1
        [4] => 2
        [5] => 1
        [one] => 2
    )
    

    注意,我包含了字符串one,以表明输出的键是数组的实际值,而不仅仅是数字索引。如果您需要密钥,您可以简单地使用array_keys,如果您想清除非重复项,只需使用这样的自定义过滤器

    $dups = array_filter($fequency, function($item){
       return ($item > 1);
    });
    
    print_r($dups);
    

    输出

    Array
    (
        [1] => 2
        [4] => 2
        [one] => 2
    )
    

    你可以在这里看到两者的作用

    http://sandbox.onlinephpfunctions.com/code/d1f6beaff3ed7f115e39ada760d4919da28935f2

    正如我所说,我不知道这意味着什么

    创建另一个数组,其中第 1 列作为重复值,其他列作为第 1 列值相同(重复)的其他列的加法或平均值

    您需要给我一个更清晰的输入示例和预期输出。我有程序员综合症,我的妻子会证实这一点。当我们在商店时,她曾让我去买“锡箔纸”。我告诉她我能找到的只有“铝箔”……男孩她疯了!

    【讨论】:

    • 感谢帮助的朋友得到了答案,继续栈更新,见谅
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2018-02-13
    相关资源
    最近更新 更多