2017-06-29 56 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,那麼你當前的解決方案會發生什麼? ? –