2017-06-29 57 views
1

我有数组是这样的:如何删除PHP中数组中重复特定值的元素?

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_id以及item_type是重复的元素?使用下面的代码,我只能删除任何单个值重复的元素。

foreach($all_device_categories as $arr){ 
    if(!isset($result[$arr->category_id])){ 
     $result[$arr->category_id] = $arr; 
    } 
} 

更新:category_id以及item_type不应该在同一时间重复。它很好,如果category_id重复但不是item_type,反之亦然。

+0

你真的想要什么?对于两个重复?或个人catgory_id或item_type? –

+0

所以yu想匹配两个键?'category_id'&'item_type'? –

+0

@FrayneKonok看到我的更新。 –

回答

2

: -试试这个。如果你不这样做,那么一些信息将被遗漏。

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

第二个例子将只存储第一个匹配,如果重复出现,那么它将避免。

+1

工程很好。感谢您的时间和精力。 –

2

用于多重键匹配。您可以将这些键组合成数组键。当你需要存储只有一个值如果两个category_iditem_type重复,那么你需要使用一些其他的字符,如到Concat的他们

foreach($all_device_categories as $arr){ 
    if(!isset($result[$arr->category_id.$arr->item_type])){ 
     $result[$arr->category_id.$arr->item_type] = $arr; 
    } 
} 
+0

你的答案有一个错误,假设'category_id'为31且'item_type'为1,那么它将首次存储,并且再次说'category_id'为3,并且'item_type'为11,那么你当前的解决方案会发生什么? ? –