删除重复值数组

时间:2016-12-15 10:28:36

标签: php arrays

我试图删除重复的数组..但它似乎不起作用......

这是我的阵列:

array
(
[1] => Array
    (
        [id] => 141
        [yt] => 5
        [PHD] => Jan
        [type] => Mercedes
        [aid] => 5
    )

[2] => Array
    (
        [id] => 2
        [yt] => 5
        [PHD] => Jan
        [type] => Mercedes
        [aid] => 5
    )

[3] => Array
    (
        [id] => 3
        [yt] => 5
        [PHD] => Jan
        [type] => Mercedes
        [aid] => 5
    )

[4] => Array
    (
        [id] => 10
        [yt] => 5
        [PHD] => Jan
        [type] => Mercedes
        [aid] => 5
    )

[5] => Array
    (
        [id] => 4
        [yt] => 5
        [PHD] => Peter
        [type] => Audi
        [aid] => 5
    )
)

输出

[5] => Array
    (
        [id] => 4
        [yt] => 5
        [PHD] => Peter
        [type] => Audi
        [aid] => 5
    )

数组使用SQL查询创建,因此我预先编写了数组:

  foreach($All_cars as $key=>$row) {
  .....
  print_r($All_cars);
  }

这样输出整个数组。

我试过这个但没有效果。

 $result = array_unique($All_cars );

我希望你们能帮助我......因为我已经整整试了一整天。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

试试这个

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

或者

$array = [
    [
        'id' => '123',
        'foo' => 'aaa',
        'bar' => 'bbb'
    ],
    [
        'id' => '123',
        'foo' => 'ccc',
        'bar' => 'ddd'
    ],
    [
        'id' => '567',
        'foo' => 'eee',
        'bar' => 'fff'
    ]
];

$ids = array_column($array, 'id');
$ids = array_unique($ids);
$array = array_filter($array, function ($key) use ($ids) {
    return in_array($key, array_keys($ids));
}, ARRAY_FILTER_USE_KEY);

结果是:

Array
(
    [0] => Array
        (
            [id] => 123
            [foo] => aaa
            [bar] => bbb
        )

    [2] => Array
        (
            [id] => 567
            [foo] => eee
            [bar] => fff
        )

)

或者

如果您需要消除特定键上的重复项,例如mysqli id,这里只是一个简单的功能

function search_array_compact($data,$key){
    $compact = [];
    foreach($data as $row){
        if(!in_array($row[$key],$compact)){
            $compact[] = $row;
        }
    }
    return $compact;
}

注意 您可以传递一组键并添加一个外部foreach,但每个附加键的速度会慢2倍。

或者
您可以使用关联数组。

$temp_array = array();
foreach ($array as &$v) {
    if (!isset($temp_array[$v['name']]))
        $temp_array[$v['name']] =& $v;
}

这会创建一个临时数组,使用$v['name']作为键。如果已经存在具有相同键的元素,则不会将其添加到临时数组中。

您可以使用

将关联数组转换回顺序数组
$array = array_values($temp_array);

示例代码和输出:http://codepad.org/zHfbtUrl

答案 1 :(得分:0)

试试这个

for($i=0;  $i < count($array); $i++)
{
    for($j=0;  $j < count($array); $j++)
    {
        if($array[$i] == $array[$j])
        {
            unset $array[$i];
        }
    }
}