PHP 唯一/组关联数组


php unique/group associative array

我想删除以下数组的重复项。我想按第一个值分组,然后重建索引。

Array
(
    [0] => Array
        (
            [title] => California
            [state_id] => 1
        )
    [1] => Array
        (
            [title] => California
            [state_id] => 1
        )
    [2] => Array
        (
            [title] => New Mexico
            [state_id] => 2
        )
    [3] => Array
        (
            [title] => Washington
            [state_id] => 3
        )
    [4] => Array
        (
            [title] => Montana
            [state_id] => 4
        )
    [5] => Array
        (
            [title] => Montana
            [state_id] => 4
        )
)

Array
(
    [0] => Array
        (
            [title] => California
            [state_id] => 1
        )
[2] => Array
    (
        [title] => New Mexico
        [state_id] => 2
    )
[3] => Array
    (
        [title] => Washington
        [state_id] => 3
    )
[4] => Array
    (
        [title] => Montana
        [state_id] => 4
    )
)

和重建密钥

Array
(
    [0] => Array
        (
            [title] => California
            [state_id] => 1
        )
    [1] => Array
        (
            [title] => New Mexico
            [state_id] => 2
        )
    [2] => Array
        (
            [title] => Washington
            [state_id] => 3
        )
    [3] => Array
        (
            [title] => Montana
            [state_id] => 4
        )
)
$array = array_values(array_combine(array_map(function ($i) { return $i['title']; }, $array), $array));

  • 解压缩title密钥 ( array_map (
  • 使用提取的标题作为新数组的键,并将其与旧数组(array_combine(组合在一起,这会消除数组的重复数据(键必须是唯一的(
  • 通过 array_values 运行结果,这会丢弃键

细分:

$keys    = array_map(function ($i) { return $i['title']; }, $array);
$deduped = array_combine($keys, $array);
$result  = array_values($deduped);

对于 PHP 5.2- 你需要像这样编写匿名回调函数:

array_map(create_function('$i', 'return $i["title"];'), $array)
  1. 按标题对数组进行排序(usort 可以解决问题(
  2. 创建一个新的空数组
  3. 循环原始数组并将找到的值存储在新的空数组中
  4. 如果下一个数组值等于最后一个,则跳过它

在此结束时,您拥有所需的数组.
还有另一种方法:

  1. 按标题对阵列进行排序
  2. 循环原始阵列
  3. 如果此数组值等于最后一个,则取消设置它
  4. 使用 PHP 排序功能再次对数组进行排序以重建键

$array = array_unique($array) ;

是的,它也适用于多维数组;它只是检查相等。