删除重复的阵列键

时间:2019-06-29 15:09:14

标签: php

数组结构

array:2 [
  0 => array:3 [
    "id" => 15710
    "sale_id" => 6699
    "item_id" => 300
  ]
  1 => array:3 [
    "id" => 15711
    "sale_id" => 6699
    "item_id" => 300
  ]
]

如果有相同的item_id,我正在尝试删除第二个数组。因此,我提到了array_unique,但似乎不起作用。

代码

$test = array_unique($model->items->toArray(), SORT_REGULAR);
Debugbar::addMessage($test,'test');

3 个答案:

答案 0 :(得分:2)

假设您的数组按id排序,并且如果重复,则要保留最小的id项:

$newArr = [];

foreach(array_reverse($arr) as $v) {
    $newArr[$v['item_id']] = $v;
}

$newArr = array_values($newArr);

demo

答案 1 :(得分:1)

好吧,array_unique不会像您希望的那样深入。 您可以通过使用以下代码来实现:

$uniqueItems = array_reduce($array, function($carry, $item){
    if(!key_exists($item['item_id'], $carry)){
        $carry[$item['item_id']] = $item;
    }

    return $carry;
}, []);

如果您想再次拥有索引数组,则可以使用:

$indexedArray = array_values($uniqueItems);

答案 2 :(得分:0)

在这种情况下,php.net网站上的一小段代码应该会对您有所帮助,

function unique_multidim_array($array, $key) {
    $temp_array = array();
    $i = 0;
    $key_array = array();

    foreach($array as $val) {
        if (!in_array($val[$key], $key_array)) {
            $key_array[$i] = $val[$key];
            $temp_array[$i] = $val;
        }
        $i++;
    }
    return $temp_array;
} 

工作演示: https://3v4l.org/v5k1j