再次介绍如何在PHP中从多维数组中删除重复值

再次介绍如何在PHP中从多维数组中删除重复值,php,duplicate-removal,on-duplicate-key,arrays,Php,Duplicate Removal,On Duplicate Key,Arrays,经过一番精疲力竭的搜索,我发现了一些类似的问题,比如我想解决的问题,但我无法使用它们的答案 以下是一些非常好的例子: 这是最相似的一个,但答案对我来说并不适用 我的问题的主要区别在于,当人们正在寻找从阵列中删除整个重复子阵列的解决方案时,我试图在子阵列的一个$key=>$value对与另一个子阵列的对应对相似时删除该子阵列。其他对可能有不同的值,甚至是相同的值 这里是我的阵列: Array( [0] => Array ( [0] => AAA

经过一番精疲力竭的搜索,我发现了一些类似的问题,比如我想解决的问题,但我无法使用它们的答案

以下是一些非常好的例子:

这是最相似的一个,但答案对我来说并不适用

我的问题的主要区别在于,当人们正在寻找从阵列中删除整个重复子阵列的解决方案时,我试图在子阵列的一个$key=>$value对与另一个子阵列的对应对相似时删除该子阵列。其他对可能有不同的值,甚至是相同的值

这里是我的阵列:

Array(

[0] => Array
    (
        [0] => AAA
        [1] => 500
    )

[1] => Array //Won't be delete 'cause [0] is different, although [1] is the same.
    (
        [0] => BBB
        [1] => 500
    )

[2] => Array //Will be delete 'cause [0] is the same.
    (
        [0] => AAA
        [1] => 500
    )

[3] => Array //Won't be delete 'cause [0] is different.
    (
        [0] => CCC
        [1] => 820
    )

[4] => Array
    (
        [0] => AAA //Will be delete 'cause [0] is the same. [1] is also different.
        [1] => 774
    )
我如何删除这些子阵列,从而得到以下结果:

Array(

[0] => Array
    (
        [0] => AAA
        [1] => 500
    )

[1] => Array
    (
        [0] => BBB
        [1] => 500
    )

[2] => Array
    (
        [0] => CCC
        [1] => 820
    )
非常感谢

最简单的解决方案(在我看来)不是使用神奇的
array\u filter
和难以维护的
array\u map
手工艺品,而是自己编写一个专门的函数:

$out = [];
$usedKeys = [];
foreach ($in as $element)
{
    list ($a, $b) = $element;
    if (!isset($usedKeys[$a]))
    {
        $usedKeys[$a] = true;
        $out[]= $element;
    }
}
var_dump($out);
这将只返回第一对元素唯一的元素(如果有多个条目,则使用第一对元素)。

这对我有效(基于提供的链接):


<?php

$items = array(
    array(
        0 => 'AAA',
        1 => 500,
    ),
    array(
        0 => 'BBB',
        1 => 500,
    ),
    array(
        0 => 'AAA',
        1 => 500,
    ),
    array(
        0 => 'CCC',
        1 => 820,
    ),
    array(
        0 => 'AAA',
        1 => 774,
    ),
);




$taken = array();

foreach($items as $key => $item) {
    if(!in_array($item[0], $taken)) {
        $taken[] = $item[0];
    } else {
        unset($items[$key]);
    }
}


echo '<pre>'.print_r($items,true).'</pre>';