2017-04-19 188 views
0

以下是將唯一值存儲到變量的代碼。刪除數組中的重複項

$filtermodel = array_unique($list2); 

輸出:

Array 
(
[0] => 15592 
[1] => 182 
[4] => 14208 
[7] => 183 
[11] => 184,185,186 
[15] => 174 
[16] => 177 
[23] => 184,186 
[24] => 184,185,186,187 
[29] => 179 
[38] => 188 
[41] => 174,176,184,185,186,187 
) 

以上array key[11] contains 184,185,186key[23][24]含有相同key[11]。如何刪除數組中的重複項?任何幫助?提前致謝。

+0

這些不重複。這些元素包含_strings_,而不是由逗號分隔的元素。 – arkascha

+0

而不是刪除嘗試,以防止在插入時 – C2486

+0

@arkascha好的。那我該如何刪除數組中存在的元素。請幫我 – Paval

回答

0

你可以用一個foreach去對每個元素的數組,並用逗號,爆炸然後做一個唯一的字符串

這裏的結果名單上的一個Demo

+1

儘管此鏈接可能回答問題,但最好在此處包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

@Pleavă索林非常感謝你的工作正常,我真的很高興。我被困在4個小時。 – Paval

0

如果我們假設「182186」例如是一個整數數組,並得到正確的你正在努力實現以下工作:

如果沒有,那麼請考慮指出更好什麼是你想實現

$mArray = array(
    15592, 
    182, 
    14208, 
    183, 
    array(184,185,186), 
    174, 
    177, 
    array(184,186), 
    array(184,185,186,187), 
    179, 
    188, 
    array(174,176,184,185,186,187), 
); 


$mFinalArray = []; 

foreach($mArray as $currentObject) 
    if(!is_array($currentObject) && !in_array($currentObject, $mFinalArray)) 
     $mFinalArray[] = $currentObject; 
    else if(is_array($currentObject)) 
     foreach($currentObject as $currentObjectInside) 
      if(!in_array($currentObjectInside, $mFinalArray)) 
       $mFinalArray[] = $currentObjectInside; 

sort($mFinalArray); 

print_r($mFinalArray); 

輸出:

Array 
(
    [0] => 174 
    [1] => 176 
    [2] => 177 
    [3] => 179 
    [4] => 182 
    [5] => 183 
    [6] => 184 
    [7] => 185 
    [8] => 186 
    [9] => 187 
    [10] => 188 
    [11] => 14208 
    [12] => 15592 
) 
+0

該代碼非常難以閱讀且容易出錯。有編碼標準的原因... – arkascha

+0

不能真正理解你的意思是「有編碼標準的原因」,但請考慮幫助我解釋(只要有鏈接),以瞭解你可以做的壞事請參閱我的編碼 - 非常感謝 –

+0

編碼標準可幫助我們所有人理解並使用code _others_編寫的代碼。如果每個程序員使用他/她自己的方言,這隻會增加複雜性。相反,程序員同意編碼標準,也稱爲編碼風格或編碼慣例。首先,你應該在每個代碼塊周圍放置花括號,所以在這裏你的條件和循環。是的,從句法的角度來看它們是可選的,但是將它們排除在外是被認爲是不好的風格。 – arkascha

0

可以通過參考使用array_walk與傳球,用作爲字典第三個參數(用戶數據),用於所使用的值:

array_walk($array, function(&$item, $_, &$dict) { 
    $values = explode(',', $item); 

    $item = implode(',', array_filter($values, function ($value) use (&$dict) { 
     // If value already in the dictionary, just skip it. 
     if (isset($dict[$value])) { 
      return false; 
     } 

     // Add value to the dictionary and not filter it out. 
     return $dict[$value] = true; 
    })); 
}, []); 

這裏是working demo

0

嘗試使用foreach循環,併爲每一行包含','符號嘗試使用爆炸。

您也可以創建一個數組來保存現有的值,以便稍後檢查它們是否存在。

簡單示例 -

$unique_values = []; 

$all_values = array (
    [0] => 15592 
    [1] => 182 
    [4] => 14208 
    [7] => 183 
    [11] => 184,185,186 
    [15] => 174 
    [16] => 177 
    [23] => 184,186 
    [24] => 184,185,186,187 
    [29] => 179 
    [38] => 188 
    [41] => 174,176,184,185,186,187 
); 

foreach($all_values as $av) { 
    if(strpos($av, ',') !== false) { 
    $av = explode(',', $av); 

    foreach($av as $a) { 
     array_push($unique_values, $a); 
     array_unique($unique_values); 

     $result = !empty(array_intersect($unique_values, $a)); 
    } 
    } 
} 

我沒有測試此代碼,但我做到了解釋的邏輯。