2013-11-15 80 views
1

我正在開發一個用戶驅動的電子商務網站,需要一些幫助。我擁有的是一個函數,它將通過一個數組循環移除重複項以及它發生的次數。然後,我需要在每次提取的重複項上運行一個函數,並多次執行。我到目前爲止的代碼有效,但當有多個具有相同重複計數的重複項時會中斷。這裏是我曾經嘗試這樣做提取重複項,並在php數組中出現多少次

if(count($array_unique) - count($match_count_unique) == 1) // do something 

if(count($array_unique) != count($match_count_unique) == 1) // do something 
到目前爲止,我所做的代碼..

$affiliates = array(11,11,12,12,13,13,13,14,14,14,14); //breaks the code 
$affiliates = array(11,11,13,13,13,14,14,14,14,12,12,12,12,12); // works fine 

$array = array(); 
$match_count = array(); 

    foreach($affiliates as $key => $affiliate) { 
     $array[] = $affiliate; 
    } 

    arsort($array); // keeps array index in order 

    foreach($array as $arrays) { 
     if(array_value_count($arrays,$array) > 1) { 
      $match_count[] = array_value_count($arrays,$array); 
     } 
    } 

    $match_count = array_unique($match_count); 

    $array_unique = arrayDuplicate($array); 

    $final_array = array_combine($match_count,$array_unique); 

    foreach($final_array as $key => $value) { 
     for($i = 0; $i < $key; $i++) { 
      echo 'addOrder(affiliate_id = ' . $value . ') . '<br>'; 
     } 
    } 

功能

function unique_array($array) { 
     return array_unique($array, SORT_NUMERIC); 
    } 

    function arrayDuplicate($array) { 
     return array_unique(array_diff_assoc($array,array_unique($array))); 
    } 

    function array_value_count($match, $array) { 
    $count = 0; 

    foreach ($array as $key => $value) 
    { 
     if ($value == $match) 
     { 
      $count++; 
     } 
    } 

    return $count; 
    } 

修復重複破譯密碼

我怎麼知道在哪裏正確添加缺少的重複值計數和數組項目,而不會使它們不同步?或者有更好的方法來做到這一點?

回答

2

How do I count occurrence of duplicate items in array

$array = array(12,43,66,21,56,43,43,78,78,100,43,43,43,21); 
$vals = array_count_values($array); 
echo 'No. of NON Duplicate Items: '.count($vals).'<br><br>'; 
print_r($vals); 

結果採取

No. of NON Duplicate Items: 7 

Array 
(
[12] => 1 
[43] => 6 
[66] => 1 
[21] => 2 
[56] => 1 
[78] => 2 
[100] => 1 
) 

重複項=(數組大小) - (總唯一值的數量)

+0

我發誓我試過這個功能!所以我想我沒有寫任何代碼,因爲它已經是本地函數了!你認爲哪種方法可以更好地處理大型數組? – handmdmr

+0

@handmdmr'array_count_values'與我的解決方案中的'foreach'循環完全相同。我沒有一個人會更有效率,因爲他們基本上可以做同樣的事情。 @KanishkaGanguly爲內置函數+1,但@handmdmr您仍然需要循環顯示結果,因爲您想爲每個被騙項目 –

+0

AFAIK做些事情,內置函數通常會更優化比我們自己寫的要多。 –

0
<?php 
$affiliates = array(11,11,12,12,13,13,13,14,14,14,14); 

// get an array whose keys are the aff# and 
//the values are how many times they occur 
$dupes = array(); 
foreach ($affiliates as $aff) { 
    $dupes[$aff]++; 
} 
// remove the 1's since those aren't dupes 
$dupes = preg_grep('~^1$~',$dupes,PREG_GREP_INVERT); 

// de-dupe the original array 
$affiliates = array_unique($affiliates); 

// for each duped affiliate... 
foreach ($dupes as $aff => $affCount) { 
    // for each time it was duped.. 
    for ($c=0;$c<$affCount;$c++) { 
    // do something. $aff is the aff# like 11 
    } 
} 
?> 
+0

我認爲這會工作,但直到今天晚上我都無法檢查它。直接和重點,我不會刪除數字1,而是將它們存儲在另一個變量中,因爲這些項目仍然需要通過'addOrder()'函數來運行。 – handmdmr

+0

@handmdmr好吧我有點好奇..如果你必須通過你的'addOrder()'函數來運行所有的模糊,甚至非模糊......爲什麼需要將它們分開,而不是循環原始數組? –

+0

我正在設計一個用戶驅動的電子商務網站。每個上傳到數據庫的產品都有一個唯一的聯盟ID。如果客戶通過單一訂單購買多個產品,那麼這些產品可能由多個用戶擁有。我需要能夠爲每個分支機構創建單獨的訂單。 – handmdmr