2012-12-27 133 views
1

我有一個新的問題,我的心在燃燒,我在PHP中的數組列表重複

$test = array(); 
    Array 
    (
     [0] => Array 
      (
       [account] => 14319896 
       [value] => 725.57 
       [id] => 280 
      ) 

     [1] => Array 
      (
       [account] => 163157 
       [value] => -723.57 
       [id] => 283 
      ) 

     [2] => Array 
      (
       [account] => 163157 
       [value] => 723.57 
       [id] => 284 
      ) 

     [3] => Array 
      (
       [account] => 161817 
       [value] => -723.57 
       [id] => 285 
      ) 

    ) 

我需要的賬戶,他們更比一個本陣,在這個例子中我需要$ test [1] [id]和$ test [2] [id]

你有什麼想法嗎?我現在不知道更多。

感謝您的幫助。

+0

你能更明確嗎?你只想要重複的賬戶ID? – artragis

+0

是的,我需要身份證。在這個例子中,我需要 $ var1 ='283'從$ test [1] [id]和$ var2 ='284'from $ test [2] [id] – JasperM

回答

4

使用賬戶號碼作爲關鍵在一個新的數組,則將每一個條目,然後把項目進行計數> 1

$dupes = array(); 
foreach($array as $account) { 
    ++$dupes[$account['account']]; 
} 

$dupes = array_filter($dupes, function($count) { return $count > 1; }); 

編輯來回答這個問題下面的評論...

如果您想要重複項的ID(或鍵),請不要直接存儲計數,而應使用其他數組。

$dupes = array(); 
foreach($array as $key => $account) { 
    if(!array_key_exists($account, $dupes)) 
    $dupes[$account['account']] = array(); 
    $dupes[$account['account']][] = $account['id']; // or: = $key 
} 

$dupes = array_filter($dupes, function($ids) { return count($ids) > 1; }); 
+0

我試試這個,但是,如果(!array_key_exists($帳戶))將不會工作丟失的關鍵做檢查array_key_exists,和$ dupes是空的。 – JasperM

+0

@JasperM:哎呀,錯過了'array_key_exists'的第二個參數。但是它甚至應該在沒有if條件的情況下工作,因爲如果在使用'[]'語法時PHP不存在,PHP將簡單地創建該數組。 – knittl

0

你應該改變你的架構有一個關聯數組,其中鍵帳號舉辦這樣的:

Array 
(
    [14319896] => Array 
     (
      [0]=>Array(
       [value] => 725.57 
       [id] => 280 
      ) 
     ) 

    [163157] => Array 
     (
      [0]=>Array(
       [value] => -723.57 
       [id] => 283 
      ) 
      [1]=>Array(
       [value] => 723.57 
       [id] => 284 
      ) 
     ) 

    [161817] => Array 
     (
      [0]=>Array(
       [value] => -723.57 
       [id] => 285 
      ) 
     ) 

) 


$dupes = array(); 
foreach($array as $key => $account) { 

    $dupes[$account['account']][] = array($account['id'],$account['value']); 
} 

蒙山這個架構,你可以得到你想要的感謝一切array_filter

$dups = array_filter($dupes, function($account){ return count($account)>1;}); 
+0

看起來不錯,但我不知道事先發生多次帳戶,數據來自一個MySQL數據庫,我不能改變數據庫不幸的是 – JasperM

+0

如果數據來自數據庫,那麼爲什麼不事先用SQL過濾? – knittl

+0

我嘗試這個,但我只能過濾一個副本,但我有2個colums那裏有愚蠢。帳戶和billno。選擇語句是如此混亂,以至於我在PHP中嘗試使用數組 – JasperM