php unique / group associative array

时间:2011-08-29 14:08:27

标签: php

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

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
        )

)

3 个答案:

答案 0 :(得分:6)

$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 :(得分:1)

  1. 按标题排序数组(usort诀窍)
  2. 创建一个新的空数组
  3. 循环原始数组并将您找到的值存储在新的空数组
  4. 如果下一个数组值等于last,则跳过它
  5. 在这结束时,你有你想要的阵列 还有另一种方式:

    1. 按标题排序数组
    2. 循环原始数组
    3. 如果此数组值等于last,则取消设置
    4. 使用PHP排序功能再次对数组进行排序以重建密钥

答案 2 :(得分:0)

$ array = array_unique($array);

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