Php 删除重复的数组键

Php 删除重复的数组键,php,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 ] ] 如果存在相同的项id,我将尝试删除第二个数组。因此,我引用了数组\u unique,但它

阵列结构

array:2 [
  0 => array:3 [
    "id" => 15710
    "sale_id" => 6699
    "item_id" => 300
  ]
  1 => array:3 [
    "id" => 15711
    "sale_id" => 6699
    "item_id" => 300
  ]
]
如果存在相同的
项id
,我将尝试删除第二个数组。因此,我引用了
数组\u unique
,但它似乎不起作用

代码


嗯,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);
在这种情况下,网站上的一段旧代码应该对您有所帮助

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;
} 

工作演示:

假设您的数组是按
id
排序的,如果重复,您希望保留具有最小
id
的项:

$newArr = [];

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

$newArr = array_values($newArr);

$newArr = [];

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

$newArr = array_values($newArr);