【问题标题】:Array Unique based upon first value only?仅基于第一个值的数组唯一?
【发布时间】:2016-08-17 10:57:06
【问题描述】:

我的数组:

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

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

 $arr = array_unique($arr, SORT_REGULAR);

有没有办法根据第一个值仅获取唯一值。我不能改变上面的结构。

想要的输出是:

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

【问题讨论】:

  • 想要的输出是什么?
  • 更新了问题并提供所需的输出。
  • 我需要删除所有重复的第一个值。但所需的输出是删除最后一个。

标签: php


【解决方案1】:

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)。因此,新数组将仅保存最新(最后)值。

【讨论】:

  • 这太好了,你能解释一下 array_column 和 array_combine 是做什么的吗?
  • @panthro,添加了关于它在做什么的简短描述。 Allso 添加了文档链接。希望它会有所帮助。
  • 这非常有用,不幸的是它确实改变了数组的结构,无论如何在合并后让它恢复到相同的结构?例如删除键名
  • 在这种情况下array_values() 会有所帮助。 :)
猜你喜欢
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多