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