通过单个值从多维数组中删除重复值

时间:2014-11-26 21:14:16

标签: php arrays multidimensional-array

好的是,我已经阅读并尝试了很多基于完全重复的解决方案,但我需要一些不同的东西并且无法弄明白......

因为如果只有一个数组值重复,我只想获取并删除重复值。 后来又合并了两者,但这并不困难。

$a = array(
    array(
        'id' => 1,
        'qty' => 1
    ),
    array(
        'id' => 0,
        'qty' => 1
    ),
    array(
        'id' => 1,
        'qty' => 2
    )
);

我希望结果如何:

$b = array(
    array(
        'id' => 1,
        'qty' => 3
    ),
    array(
        'id' => 0,
        'qty' => 1
    )
);

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

<?php
$a = array(
    array(
        'id' => 1,
        'qty' => 1
    ),
    array(
        'id' => 0,
        'qty' => 1
    ),
    array(
        'id' => 1,
        'qty' => 2
    )
);

$idsList = array();
$res = array();
foreach ($a as $arr){
  if (!in_array($arr['id'], $idsList)){
    $res[$arr['id']] = $arr;
    $idsList[] = $arr['id'];
  }
  else{
      $res[$arr['id']]['qty'] += $arr['qty'];

  }
}

echo "<pre>";
print_r($res);

获得这样的数组:

Array
(
    [1] => Array
        (
            [id] => 1
            [qty] => 3
        )

    [0] => Array
        (
            [id] => 0
            [qty] => 1
        )

)

结帐此演示:http://codepad.org/UP0G7WnE

答案 1 :(得分:3)

$a = array(
array(
    'id' => 1,
    'qty' => 1
),
array(
    'id' => 0,
    'qty' => 1
),
array(
    'id' => 1,
    'qty' => 2
)
);

$b = array();
$ids = array();
for($i = 0; $i < count($a); $i++)
{ 
  if(in_array($a[$i]['id'], $ids))
  {    
    $j = array_search($a[$i]['id'], array_values($ids));    
    $b[$j]['qty'] += $a[$i]['qty'];
  }
 else
 {
   $b[$i]['id'] = $a[$i]['id'];
   $b[$i]['qty'] = $a[$i]['qty'];
   $ids[] = $a[$i]['id'];
 }
}

echo "<pre>";
print_r($b);

答案 2 :(得分:2)

这可能是一个解决方案:

$temp = array();

foreach ($a as $data){

    if (isset($temp[$data['id']])){
        $temp[$data['id']] += $data['qty'];             
    } else {
        $temp[$data['id']] = $data['qty'];
    }

}

// Format array

$b = array();

foreach ($temp as $id => $qty){

    $b[] = array(
        'id' => $id,
        'qty' => $qty
    );  

}

输出将是:

Array
(
    [0] => Array
        (
            [id] => 1
            [qty] => 3
        )

    [1] => Array
        (
            [id] => 0
            [qty] => 1
        )

)