PHP根据键从多维数组中删除重复记录

时间:2019-08-07 10:03:18

标签: php arrays multidimensional-array

这是我原始的数组示例:

Array ( [product_id] => 5 [receipt] => R5B1A2L8 )
Array ( [product_id] => 5 [receipt] => R5V3ABWR )
Array ( [product_id] => 7 [receipt] => R2B3AC2M )

我想基于'product_id'键从数组中删除重复记录。该数组是从数据库生成的,因此可以更改数组的值。

这是我想要实现的结果:

Array ( [product_id] => 5 [receipt] => R5B1A2L8 )
Array ( [product_id] => 7 [receipt] => R2B3AC2M )

7 个答案:

答案 0 :(得分:0)

最简单的方法是做一个

$unique = [];
foreach($arr as $key => $value) {
    if($unique[$value['product_id']]) {
        unset ($arr[$key]);
    } else {
        $unique[$value['product_id']] = true;
    }
}

答案 1 :(得分:0)

function multi_unique($src){
    $output = array_map("unserialize",
    array_unique(array_map("serialize", $src)));
    return $output;
   }

 //Call function

   $reqArray=array( array("name","name"), 
        array("age","12"), 
        array("name","parvez"), 
        array("add","delhi")
 );

  $output=multi_unique($reqArray);

请参见上面的示例 或者这可能对您有帮助

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

答案 2 :(得分:0)

$input = array(array('product_id'=>5,'receipt'=>'sdsd'),array('product_id'=>5,'receipt'=>'dswe'),array('product_id'=>6,'receipt'=>'arewr'));
        $tempArr = array_unique(array_column($input, 'product_id'));
        echo '<pre>';
        print_r(array_intersect_key($input, $tempArr));
        exit;

处理您的阵列。

$tempArr = array_unique(array_column($array, 'product_id'));
print_r(array_intersect_key($array, $tempArr));

答案 3 :(得分:0)

您可以循环输入数组,如果找不到键,则将找到的键推到辅助数组,否则取消设置项

// $array is your input array

$product_ids = []; // Create a second temp array

foreach($array as $key => $item): // Loop your input array
    if ( in_array($item['product_id'],$product_ids) ){ // Check if the current item exists in our temp array
        unset ($array[$key]); // If it does, remove the current item from our input array
    } else {
        $product_ids[] = $item['product_id']; // Otherwise push the key to our temp array
    }
endforeach;

print_r($array); 

这将保留原始数组索引。如果您想要增量索引,则可以将项目推送到新数组中,而不用从原始数组中取消设置

答案 4 :(得分:0)

尝试一下:

<?php

$products = [
    [
        'product_id' => 5,
        'receipt' => 'R5B1A2L8',
    ],
    [
        'product_id' => 5,
        'receipt' => 'R5V3ABWR',
    ],
    [
        'product_id' => 7,
        'receipt' => 'R2B3AC2M',
    ],
];

// gives you unique product_id indexes, here 0 and 2
$uniqueKeys = array_unique(array_column($products, 'product_id'));
// extract previous indexes from your products array
$uniqueProducts = array_intersect_key($products, $uniqueKeys);

var_dump($uniqueProducts);

答案 5 :(得分:0)

尝试一下

function array_unset($arr,$key){     
    $res = array();        
    foreach ($arr as $value) {            
       if(isset($res[$value[$key]])){   
             unset($value[$key]);  
       }  
       else{  
            $res[$value[$key]] = $value;  
       }    
    }  
    return $res;  
}  
$arr = array(   
        array('product_id'=>'5','receipt'=>'R5B1A2L8' ),  
        array('product_id'=>'5','receipt'=>'R5V3ABWR'),  
        array('product_id'=>'7','receipt'=>'R2B3AC2M')  
);  
$newArr = array_unset($arr,'product_id');  
echo '<pre>';  
print_r(array_values($newArr));  

答案 6 :(得分:0)

您可以使用此功能删除重复的记录:

array_unique($my_array, SORT_REGULAR);