简体   繁体   English

删除MultiDimensional数组中的重复项并保留原始数组键值

[英]Remove duplicates in MultiDimensional array and keep the original array key value

I have this array 我有这个数组

Array (
    [0] => Array ( [name] => Apple [amount] => 1)
    [1] => Array ( [name] => Apple [amount] => 2)
    [2] => Array ( [name] => Orange [amount] => 3)
    [3] => Array ( [name] => Orange [amount] => 4)
    [4] => Array ( [name] => Banana [amount] => 5)
    [5] => Array ( [name] => Pear [amount] => 6)
)

Which I would like to end up like this: 我最终会这样结束:

Array (
    [0] => Array ( [name] => Apple [amount] => 1)
    [2] => Array ( [name] => Orange [amount] => 3)
    [4] => Array ( [name] => Banana [amount] => 5)
    [5] => Array ( [name] => Pear [amount] => 6)
)

The important thing is that the array key values must be the same after transforming. 重要的是转换后数组键值必须相同。

At the moment I use this solution: 目前我使用这个解决方案:

$newArray = array();
$usedFruits = array();

foreach ( $originalArray AS $line ) {
    if ( !in_array($line['name'], $usedFruits) ) {
        $usedFruits[] = $line['name'];
        $newArray[] = $line;
    }
}

$originalArray = $newArray;
$newArray = NULL;
$usedFruits = NULL;

This removes the duplicate arrays but it also resets the key values. 这将删除重复的数组,但它也会重置键值。

Array ( 
    [0] => Array ( [name] => Apple [amount] => 1)
    [1] => Array ( [name] => Orange [amount] => 3)
    [2] => Array ( [name] => Banana [amount] => 5)
    [3] => Array ( [name] => Pear [amount] => 6)
)

How is it possible to keep the original array key values? 如何保留原始数组键值?

Use the optional $key in the foreach() : 使用foreach()的可选$key

foreach ( $originalArray AS $key => $line ) { 
    if ( !in_array($line['name'], $usedFruits) ) { 
        $usedFruits[] = $line['name']; 
        $newArray[$key] = $line; 
    } 
} 

http://codepad.org/SuClGlQW http://codepad.org/SuClGlQW

Outputs: 输出:

Array
(
    [0] => Array
        (
            [name] => Apple
            [amount] => 1
        )

    [2] => Array
        (
            [name] => Orange
            [amount] => 3
        )

    [4] => Array
        (
            [name] => Banana
            [amount] => 5
        )

    [5] => Array
        (
            [name] => Pear
            [amount] => 6
        )

)

All You had to use is the unset function. 所有你必须使用的是未设置的功能。

unset function removes an item from array at specified index without rebasing the array index. unset函数从指定索引处的数组中删除一个项而不重新设置数组索引。

code will be as follows 代码如下

$originalArray = array( 
    array("name" => "Apple", "amount" => 1),
    array("name" => "Apple", "amount" => 2),
    array("name" => "Orange", "amount" => 3),
    array("name" => "Orange", "amount" => 4),
    array("name" => "Banana", "amount" => 5),
    array("name" => "Peer", "amount" => 6)
);

$seenItems = array();

foreach($originalArray as $index => $item){
    if(in_array($item["name"], $seenItems))
        unset($originalArray[$index]);
    else
        $seenItems[] = $item["name"];
}

and the output will be as follows 输出如下

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(5) "Apple"
    ["amount"]=>
    int(1)
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(6) "Orange"
    ["amount"]=>
    int(3)
  }
  [4]=>
  array(2) {
    ["name"]=>
    string(6) "Banana"
    ["amount"]=>
    int(5)
  }
  [5]=>
  array(2) {
    ["name"]=>
    string(4) "Peer"
    ["amount"]=>
    int(6)
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM