在多维数组上查找重复项

时间:2015-11-14 16:58:24

标签: php arrays find duplicates

我有这个多维数组:

阵 (     [0] =>排列         (             [id] => 0             [level] => 0             [%] => 0         )

[1] => Array
    (
        [id] => 236763
        [percent] => 1
        [name] => NAME1 
    )

[2] => Array
    (
        [id] => 73801
        [percent] => 2
        [name] => NAME2
    )

[3] => Array
    (
        [id] => 73792
        [percent] => 3
        [name] => NAME3
    )

[4] => Array
    (
        [id] => 63739
        [percent] => 4
        [name] => NAME4
    )

[5] => Array
    (
        [id] => 63756
        [percent] => 5
        [name] => NAME5
    )

[6] => Array
    (
        [id] => 63758
        [percent] => 5
        [name] => NAME6
    )

[7] => Array
    (
        [id] => 63741
        [percent] => 4
        [name] => NAME7
    )

[8] => Array
    (
        [id] => 63739
        [percent] => 4
        [name] => NAME4
    )

我希望找到所有重复项,但输出必须是:

  • on duplicates to add up percent item
  • 删除重复项
  • 重复数量

我在2周内搜索此解决方案,但没有任何作用......

我创建了这个解决方案,但它不是很好的代码:

$percent[2] = 50;
$percent[3] = 25;
$percent[4] = 12.5;
$percent[5] = 6.25;
$percent[6] = 3.125;
$percent[7] = 1.5625;
$percent[8] = 0.78125;
$percent[9] = 0.390625;
$percent[10] = 0.1953125;

$stat[0]['ped'] = 0;
$stat[0]['count'] = 0;
$stat[0]['percent'] = 0;

for ($i = 0; $i < $delka; $i++) {
$save = 0;
for ($a = 0; $a < (Count($stat)); $a++) {
if ($stat[$a]['ped'] == $ped[$i][id]) { 
                              $fetch = $ped[$i][percent];

                            $hodnota = $percent[$fetch];
                            $stat[$a]['percent'] = $stat[$a]['percent'] + $hodnota;
                            $stat[$a]['count'] = $stat[$a]['count'] + 1;

                            $save = 1;

                            }
}
if ($save == 0) {
                $len = Count ($stat);

                $stat[$len]['ped'] = $ped[$i][id];
                $stat[$len]['count'] = 1;
                $stat[$len]['name'] = $ped[$i][name];


$fetch = $ped[$i][percent];
$hodnota = $percent[$fetch];
                $stat[$len]['percent'] = $hodnota;
                }
}
$suma = 0;
for ($i = 1; $i < Count($stat); $i++) {
$suma = $suma + $stat[$i]['count'];
}

抱歉我的英文不好,谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

使用此代码:

<?php

function id_in_array($array, $id){
    foreach($array as $k => $v){
        if($v['id'] == $id){
            return $k;
        }
    }

    return false;
}

$array = array(
        array(
            'id' => 7,
            'percent' => 5,
            ),
        array(
            'id' => 4,
            'percent' => 5,
            ),
        array(
            'id' => 3,
            'percent' => 5,
            ),
        array(
            'id' => 7,
            'percent' => 5,
            ),
        );

$out = array();
$dup_nbr = 0;
foreach($array as $k => $v){
    $out_k = id_in_array($out, $v['id']);
    if(is_int($out_k) && $out_k !== false){
        $out[$out_k]['percent'] += $v['percent'];
        $dup_nbr++;
    }else{
        $out[] = $v;
    }
}

print_r($out);     // Your output array with fused duplicates
print_r($dup_nbr); // Duplicates number