在php中,如何删除数组中重复特定值的元素?
我有这样的数组:在php中,如何删除数组中重复特定值的元素?,php,arrays,Php,Arrays,我有这样的数组: Array ( [0] => stdClass Object ( [model_id] => 1 [category_id] => 1 [model_name] => Xperia [category_name] => Mobile [category_image] => 81649e37620644
Array
(
[0] => stdClass Object
(
[model_id] => 1
[category_id] => 1
[model_name] => Xperia
[category_name] => Mobile
[category_image] => 81649e37620644bec47244fda5233363.jpg
[item_type] => 1
)
[1] => stdClass Object
(
[model_id] => 3
[category_id] => 1
[model_name] => HTC One
[category_name] => Mobile
[category_image] => 250a3e4655454feaec8e2537d149846a.jpg
[item_type] => 1
)
[2] => stdClass Object
(
[model_id] => 9
[category_id] => 3
[model_name] => Apple TV
[category_name] => Televisions
[category_image] => no_image.jpg
[item_type] => 1
)
[3] => stdClass Object
(
[model_id] => 4
[category_id] => 2
[model_name] => MacBook
[category_name] => Laptop
[category_image] => c9890535d26bd06189fc22940a5ee5da.jpg
[item_type] => 1
)
[4] => stdClass Object
(
[model_id] => 2
[category_id] => 1
[model_name] => iPhone 7
[category_name] => Mobile
[category_image] => cab0631b071d0562412ccab2279d391e.jpg
[item_type] => 1
)
[5] => stdClass Object
(
[model_id] => 5
[category_id] => 3
[model_name] => Samsung TV
[category_name] => Televisions
[category_image] => e60bd4822e516a93f1e99a8b456b70ce.jpg
[item_type] => 1
)
)
如何删除重复出现category\u id
和item\u type
的元素?使用下面的代码,我只能删除任何单个值重复的元素
foreach($all_device_categories as $arr){
if(!isset($result[$arr->category_id])){
$result[$arr->category_id] = $arr;
}
}
更新:
category\u id
以及item\u type
不应同时重复。如果category\u id
重复,但不重复item\u type
,或者反之亦然,则没有问题。用于多键匹配。您可以将这些键组合成数组键。试试这个:
foreach($all_device_categories as $arr){
if(!isset($result[$arr->category_id.$arr->item_type])){
$result[$arr->category_id.$arr->item_type] = $arr;
}
}
用于多键匹配。您可以将这些键组合成数组键。试试这个:
foreach($all_device_categories as $arr){
if(!isset($result[$arr->category_id.$arr->item_type])){
$result[$arr->category_id.$arr->item_type] = $arr;
}
}
由于如果
类别id
和项目类型
重复,则只需存储一个值,因此需要使用一些其他字符将其合并,如:-。如果你不这样做,那么一些信息就会被遗漏
foreach($all_device_categories as $arr){
$result[$arr->category_id.'-'.$arr->item_type] = $arr;
}
我认为这将对您有所帮助,如果找到任何匹配项,这将始终采用更新数组值。如果您不想接受更新值,那么只需在存储新数组之前应用一个条件即可
foreach($all_device_categories as $arr){
if(!isset($result[$arr->category_id.'-'.$arr->item_type])){
$result[$arr->category_id.'-'.$arr->item_type] = $arr;
}
}
第二个示例将只存储第一个匹配,如果重复出现,那么它将避免。因为您只需要存储一个值,如果
category\u id
和item\u type
都重复,那么您需要使用一些其他字符将它们合并,如:-。如果你不这样做,那么一些信息就会被遗漏
foreach($all_device_categories as $arr){
$result[$arr->category_id.'-'.$arr->item_type] = $arr;
}
我认为这将对您有所帮助,如果找到任何匹配项,这将始终采用更新数组值。如果您不想接受更新值,那么只需在存储新数组之前应用一个条件即可
foreach($all_device_categories as $arr){
if(!isset($result[$arr->category_id.'-'.$arr->item_type])){
$result[$arr->category_id.'-'.$arr->item_type] = $arr;
}
}
第二个示例将只存储第一个匹配,如果重复出现,那么它将避免。您真正想要的是什么?两个都重复?或者单个类别id或项目类型?所以您想匹配两个键?
类别id
&项目类型
?@FrayneKonok查看我的更新。@RabinLama,选中。但混淆的是,如果一个类别id重复,而不是项目类型,那么该怎么办??你是说类别id和项目类型同时重复吗???@FrayneKonok再次看到我的更新。你真正想要的是什么?两个都重复?或者单个类别id或项目类型?所以您想匹配两个键?类别id
&项目类型
?@FrayneKonok查看我的更新。@RabinLama,选中。但混淆的是,如果一个类别id重复,而不是项目类型,那么该怎么办??您的意思是类别id和项目类型同时重复吗???@FrayneKonok再次查看我的更新。您的回答有一个错误,假设类别id
为31,而项目类型
为1,则它将第一次存储,再次说,category\u id
是3,item\u type
是11,那么在当前解决方案中会发生什么?您的答案有一个bug,假设category\u id
是31,item\u type
是1,那么它将第一次存储,再次说category\u id
是3,item\u type
是11,那么在当前解决方案中会发生什么呢?效果很好。谢谢你的时间和努力。效果很好。谢谢你的时间和努力。