数组仅基于第一个值唯一?

时间:2016-08-17 10:57:06

标签: php

我的阵列:

$arr = [['abc', 'a'],['xyz', 'f'],['abc', 'x']];

我需要删除任何重复的第一个值,例如。上面有两个abc值,array_unique将不起作用,因为第二个值不同:

 $arr = array_unique($arr, SORT_REGULAR);

有没有办法只根据第一个值获取唯一值。我无法改变上述结构。

所需的输出是:

$arr = [['abc', 'a'],['xyz', 'f']];

1 个答案:

答案 0 :(得分:5)

array_combine()& array_column()可以提供帮助。但它会改变嵌套数组的顺序,并且只保留重复项的最后一个值。

$arr = [['abc', 'a'],['xyz', 'f'],['abc', 'x']];
$temp = array_combine(array_column($arr, 0), $arr);

array_column不适用于旧版本。 (提供(PHP 5> = 5.5.0,PHP 7)

<强>输出

array(2) {
  ["abc"]=>
  array(2) {
    [0]=>
    string(3) "abc"
    [1]=>
    string(1) "x"
  }
  ["xyz"]=>
  array(2) {
    [0]=>
    string(3) "xyz"
    [1]=>
    string(1) "f"
  }
}

array_column 将返回一个数组,其中包含来自0索引的子数组的所有值。

array_combine 会将子数组分配给array_column返回的值。

因此,相同的密钥不能存在两次,它将使用相同的密钥(对于0)用较新的值覆盖以前的值。因此,新数组将仅保留最新(最后)值。