2012-10-11 64 views
1

我有一個數組,看起來像這樣:如何分組數組但不創建新對象?

array (size=21) 
    0 => string '2' (length=1) 
    1 => string '' (length=0) 
    2 => string '20' (length=2) 
    3 => string '19' (length=2) 
    4 => string '14' (length=2) 
    5 => string '13' (length=2) 
    6 => string '' (length=0) 
    7 => null 
    8 => null 
    9 => string '20' (length=2) 
    10 => null 
    11 => string '10' (length=2) 
    12 => string '' (length=0) 
    13 => null 
    14 => string '13' (length=2) 
    15 => null 
    16 => string '' (length=0) 
    17 => null 
    18 => null 
    19 => string '' (length=0) 
    20 => string '20' (length=2) 

而且我想用相同的字符串分組行創建數組的新數組。例如

2 =>字符串 '20'(長度= 2)20 =>字符串 '20'(長度= 2)並用9 =>字符串 '20'(長度= 2)

5 =>字符串 '13'(長度= 2)與 =>字符串 '13'(長度= 2)

並根據字符串在該字段中出現的次數排序新創建的數組行。

訂單必須DESC從最事件到最後像一個典型的頂部東西圖表(最當前字符串是第一個和最不低)

因此,修改後的數組看起來像這樣:

array (size=21) 
     0 => string '20' (length=2) 
     1 => string '13' (length=2) 
     ... 

我還需要某種方式來處理空結果,例如17 => null在最終數組修改結果中根本不被包含。

+0

看起來像一個任務,試試自己,問問是否有問題。 – Dev

回答

1

這應該做的伎倆:

// Filter the "null results" first 
$myarray = array_filter($myarray, create_function('$arg', ' 
    return !is_null($arg); 
')); 

$occurrences = array_count_values($myarray); 
// EDIT: arsort preserves the key => value correlation 
arsort($occurrences, SORT_NUMERIC); 

var_dump(array_keys($occurrences)); 
+0

謝謝,它輸出該:陣列(大小= 8) 0 => INT 0 1 => INT 1 2 => INT 2 3 => INT 3 4 => INT 4 5 => INT 5 6 => int 6 7 => int 7 – Derfder

+0

是的,我的不好。請稍等片刻,我會解決問題並更新。 – aefxx

+0

謝謝,我想它會把它們分組,但我需要保持這些值,例如「20」,「13」等,並根據事件重新排序。怎麼做? – Derfder

0

試試這個。

$result = array_count_values($a); 
arsort($result); 

$result = array_keys($result);