如何从数组PHP中删除重复的子项

时间:2017-11-02 20:40:18

标签: php arrays duplicates

我需要有关如何从一组数组中删除一个或多个数组子项的帮助,这些数组与PHP中的其他子项具有完全相同的键和值。请看一下这个数组:

Array
(
    [0] => Array
        (
            [scn_fr_tm] => 10:35
            [scn_to_tm] => 12:55
            [mov_prnt_nm] => Thor Ragnarok
        )
    [1] => Array
        (
            [scn_fr_tm] => 10:40
            [scn_to_tm] => 12:39
            [mov_prnt_nm] => Geostorm
        )
    [2] => Array
        (
            [scn_fr_tm] => 11:30
            [scn_to_tm] => 13:22
            [mov_prnt_nm] => One Fine Day
        )
    [3] => Array
        (
            [scn_fr_tm] => 11:30
            [scn_to_tm] => 13:22
            [mov_prnt_nm] => One Fine Day
        )
    [4] => Array
        (
            [scn_fr_tm] => 11:30
            [scn_to_tm] => 13:00
            [mov_prnt_nm] => Total Chaos
        )
    [5] => Array
        (
            [scn_fr_tm] => 11:30
            [scn_to_tm] => 13:22
            [mov_prnt_nm] => One Fine Day
        )
)
从上面的数组中我可以看到,我想从数组中删除数组[3]和数组[5],因为它有重复的键和数组[2]的值。上面的数组是动态创建的,所以请不要让我使用unset(array[3])unset(array[5])

这是我的数组创建代码,从其他数组创建的数组:

foreach ($datas as $data)
{
    if (array_key_exists('attr', $data))
    {
        $arr[] = array(
            'scn_fr_tm'     => substr_replace($data['attr'][0]['scn_fr_tm'],':',2,0),
            'scn_to_tm'     => substr_replace($data['attr'][0]['scn_to_tm'],':',2,0),
            'mov_prnt_nm'   => substr($data['mov_prnt_nm'], 0, 20)
        );
    }
}

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我想到了几个不同的选择:

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

while ($item = array_pop($array)) {
    if (!in_array($item, $array)) {
        $unique[] = $item;
    }
}