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

时间:2022-03-22 07:57:10

Ok the thing is, Ive read and tried a lot of solutions found here based on complete duplicateness, BUT I need something a little bit different and cant figure it out...

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

Because I only want to get and remove the duplicate value if only 1 of the array values is duplicate. And also later combine the two but that's not that difficult.

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

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

What I want the outcome to be:

我想要的结果是:

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

3 个解决方案

#1


3  

You can do something like the following:

您可以执行以下操作:

<?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);

To get array like that:

得到这样的数组:

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

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

)

Checkout This DEMO: http://codepad.org/UP0G7WnE

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

#2


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

#3


2  

This could be a solution:

这可能是一个解决方案:

$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
    );  

}

Output will be:

输出将是:

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

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

)

#1


3  

You can do something like the following:

您可以执行以下操作:

<?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);

To get array like that:

得到这样的数组:

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

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

)

Checkout This DEMO: http://codepad.org/UP0G7WnE

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

#2


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

#3


2  

This could be a solution:

这可能是一个解决方案:

$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
    );  

}

Output will be:

输出将是:

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

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

)