这是我原始的数组示例:
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 )
答案 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);