Php 如何从具有不同键的多维数组中删除重复值
我正在尝试从多维数组中删除重复值。我试过很多例子,但我没有得到我想要的 我的数组在这里Php 如何从具有不同键的多维数组中删除重复值,php,arrays,Php,Arrays,我正在尝试从多维数组中删除重复值。我试过很多例子,但我没有得到我想要的 我的数组在这里 Array ( [0] => Array ( [0] => stdClass Object ( [CouponCode] => REZEZ150 [PurchaseAmt] => 1000.00 [DiscountAmt] => 1
Array
(
[0] => Array
(
[0] => stdClass Object
(
[CouponCode] => REZEZ150
[PurchaseAmt] => 1000.00
[DiscountAmt] => 150.00
)
[1] => stdClass Object
(
[CouponCode] => REZEZ500
[PurchaseAmt] => 2500.00
[DiscountAmt] => 500.00
)
)
[1] => Array
(
[0] => stdClass Object
(
[CouponCode] => REZEZ150
[PurchaseAmt] => 1000.00
[DiscountAmt] => 150.00
)
[1] => stdClass Object
(
[CouponCode] => REZEZ350
[PurchaseAmt] => 2000.00
[DiscountAmt] => 350.00
)
[2] => stdClass Object
(
[CouponCode] => REZEZ500
[PurchaseAmt] => 2500.00
[DiscountAmt] => 500.00
)
)
)
我希望在删除重复值后使用数组,如
Array
(
[0] => Array
(
[0] => stdClass Object
(
[CouponCode] => REZEZ150
[PurchaseAmt] => 1000.00
[DiscountAmt] => 150.00
)
[1] => stdClass Object
(
[CouponCode] => REZEZ350
[PurchaseAmt] => 2000.00
[DiscountAmt] => 350.00
)
[2] => stdClass Object
(
[CouponCode] => REZEZ500
[PurchaseAmt] => 2500.00
[DiscountAmt] => 500.00
)
)
)
类似的问题和答案,但不能解决我的问题:
[How to remove duplicates from multidimensional array in php \[duplicate\]][1]
试试这个
$arrResult = $arrResult1 = array();
foreach($arrData as $key1 => $arrData1){
foreach($arrData1 as $key2 => $arrData2){
$arrResult[] = $arrData2;
}
}
$arrResult1[] = array_map("unserialize", array_unique(array_map("serialize", $arrResult)));
echo "<pre>"; print_r($arrResult1);
$arrResult=$arrrresult1=array();
foreach($arrData作为$key1=>$arrData1){
foreach($arrData1作为$key2=>$arrData2){
$arrResult[]=$arrData2;
}
}
$arrResult1[]=数组映射(“非序列化”,数组唯一(数组映射(“序列化”),$arrResult));
回声“;打印费用($arresult1);
谢谢
我已经解决了
首先我把它改成了一维数组
$j=array();
foreach ($a as $key => $value) {
$j[$value->CouponCode]['CouponCode']=$value->CouponCode;
$j[$value->CouponCode]['PurchaseAmt']=$value->PurchaseAmt;
$j[$value->CouponCode]['DiscountAmt']=$value->DiscountAmt;
}
p($j);
之后,运行foreach循环代表键和值,如
Array
(
[REZEZ150] => Array
(
[CouponCode] => REZEZ150
[PurchaseAmt] => 1000.00
[DiscountAmt] => 150.00
)
[REZEZ500] => Array
(
[CouponCode] => REZEZ500
[PurchaseAmt] => 2500.00
[DiscountAmt] => 500.00
)
[REZEZ350] => Array
(
[CouponCode] => REZEZ350
[PurchaseAmt] => 2000.00
[DiscountAmt] => 350.00
)
)
现在我得到了结果
$couponCodes = array();
$a = array_filter($a, function (stdClass $purchase) use (&$couponCodes) {
if (in_array($purchase->CouponCode, $couponCodes)) {
return false;
}
$couponCodes[] = $purchase->CouponCode;
return true;
});
请告诉我这是好方法还是坏方法?使用array\u filter()
:
接着
有关参考,请参阅 我认为在提取数据时有一个问题,你能再解释一下你是如何从数据库中提取数据的吗?实际上,我在foreach循环中发送请求,然后在数组中一个接一个地得到响应,比如$response[$key],然后打印出循环;感谢您的回复,但它的工作方式与我所希望的不同当您在循环创建一维数组时,只需检查元素是否已经存在。这将避免第二个循环,并获得所需的未复制数组。
$couponCodes = array();
$a = array_filter($a, function (stdClass $purchase) use (&$couponCodes) {
if (in_array($purchase->CouponCode, $couponCodes)) {
return false;
}
$couponCodes[] = $purchase->CouponCode;
return true;
});