PHP 数组独特的值

6
我有一个像这样的数组
Array
(
    [0] => Array
        (
            [id] => BA
            [name] => British Airways
        )

    [1] => Array
        (
            [id] => BA
            [name] => British Airways
        )

    [2] => Array
        (
            [id] => LA
            [name] => Lanchile
        )

    [3] => Array
        (
            [id] => LA
            [name] => Lanchile
        )

    [4] => Array
        (
            [id] => BA
            [name] => British Airways
        )

    [5] => Array
        (
            [id] => BA
            [name] => British Airways
        )

)

and i want to get

Array
(
    [0] => Array
        (
            [id] => BA
            [name] => British Airways
        )

    [1] => Array
        (
            [id] => LA
            [name] => Lanchile
        )
)

但是在使用array_unique函数之后,我只剩下了这个:
Array
(
    [0] => Array
        (
            [id] => BA
            [name] => British Airways
        )

)

我在做什么错了吗?

5
你尝试使用 array_unique(my_array, SORT_REGULAR) 了吗?这个函数可以去除数组中的重复元素,保留数据类型和键值。 - diegoperini
1
可能是重复问题 - https://dev59.com/OXVC5IYBdhLWcg3wZwNT。如果这个数组是查询的结果,您需要重新检查查询以消除重复项。 - verisimilitude
1
可能是https://dev59.com/xVnUa4cB1Zd3GeqPaXBo的重复问题。 - Linga
1
不知道如何将评论标记为答案,但是'diegoperini'你是对的,array_unique(my_array,SORT_REGULAR) + sort()解决了问题! :) - Itsmeromka
1
真希望我1小时前就看到这些评论了。我不认为你可以将评论标记为答案。您应该自己回答问题,给@diegoperini以功劳,并将答案标记为已完成。 - Niklas Ekman
4个回答

19
array_unique(my_array, SORT_REGULAR)

根据评论所请求的。 :)


1
你可能更愿意说 - 太棒了“steallution”哈哈大笑 支持diegoperini,深切关注正义。 - Arthur Kushman
我那天误读了Niklas Ekman的建议,现在我意识到那是抄袭。对此给您带来的不便深感抱歉。我已经改为点赞该问题。 - diegoperini

4

正如所提到的,array_unique不支持多维数组,但是你可以遍历数据并构建自己的函数。

<?php
$airlines = array(
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
);
$tmp = array();
foreach ($airlines as $item) {
    if (!in_array($item['id'], $tmp)) {
        $unique[] = $item;
        $tmp[] = $item['id'];
    }
}

var_dump($unique); // $unqiue will have your desired results in it var_dump was just for testing

2
 array_unique is not intended to work on multi dimensional arrays.

你需要循环数组。 array_unique

1
$airlines = array(
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
);


$unique = array_map(
    'unserialize',
    array_unique(
        array_map(
            'serialize',
            $airlines
        )
    )
);

var_dump($unique);

如果元素的顺序不同,那么这种方法会失败。array_unique($airlines, SORT_REGULAR);是正确的答案。 - cleong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接