2011-01-28 93 views
3

我有一個數組,看起來像計算不同字符串的數量?

Array 
(
    [1] => Array 
     (
      [0] => Date 
      [1] => Action 
     ) 

    [2] => Array 
     (
      [0] => 2011-01-22 11:23:19 
      [1] => SHARE_TWEET 
     ) 

    [3] => Array 
     (
      [0] => 2011-01-22 11:23:19 
      [1] => SHARE_FACEBOOK 
     ) 

和其他許多不同的值(約10),我想要做的就是我要計算次數的字符串是在數組中。我打算使用array_count_values,但它不包括多維數組。

還有其他的選擇嗎?

+0

有可能是它的另一個功能,但我會通過與array_walk(很明顯,我猜)數組遞歸走,檢查是否值是串。 – 2011-01-28 15:31:35

回答

5

這可能是由於第一平整的數組,然後就可以使用array_count_values()來完成:

壓扁,這裏是招:

$array = call_user_func_array('array_merge', $arrays); 

然後:

$counts = array_count_values($array); 

輸出:

array (
    'Date' => 1, 
    'Action' => 1, 
    '2011-01-22 11:23:19' => 2, 
    'SHARE_TWEET' => 1, 
    'SHARE_FACEBOOK' => 1, 
) 

全碼:

$array = call_user_func_array('array_merge', $arrays); 
var_export(array_count_values($array)); 
0

僞碼

$inputArray = // your array as in the example above 

foreach ($inputArray as $key => $value) { 
    $result[$value[1]] = $result[$value[1]] + 1; 
} 

var_dump($result); 
0

這裏有一個方法來完成這項工作:

$arr = Array (
    1 => Array (
      0 => 'Date', 
      1 => 'Action' 
    ), 
    2 => Array (
      0 => '2011-01-22 11:23:19', 
      1 => 'SHARE_TWEET' 
    ), 
    3 => Array (
      0 => '2011-01-22 11:23:19', 
      1 => 'SHARE_FACEBOOK' 
    ) 
); 

$result = array(); 
function count_array($arr) { 
global $result; 
    foreach($arr as $k => $v) { 
     if (is_array($v)) { 
      count_array($v); 
     } else { 
      if (isset($result[$v])) { 
       $result[$v]++; 
      } else { 
       $result[$v] = 1; 
      } 
     } 
    } 
} 
count_array($arr); 
print_r($result); 

輸出:

Array 
(
    [Date] => 1 
    [Action] => 1 
    [2011-01-22 11:23:19] => 2 
    [SHARE_TWEET] => 1 
    [SHARE_FACEBOOK] => 1 
) 
1

任何時候你正在處理數組,特別是PHP中的循環我不能足夠的字符串建議你看看數組文件,你會驚訝地發現,你多快意識到代碼中的大部分循環是不必要的。 PHP有一個內置的函數來實現你所謂的array_walk_recursive。而且,由於你使用PHP5,你可以使用寧可create_function倒閉(這是非常麻煩的,尤其是調試,而不能由PHP解釋afik進行優化)

$strings = array(); 
array_walk_recursive($arr, function($value, $key) use (&$strings) { 
    $strings[$value] = isset($strings[$value]) ? $strings[$value]+1 : 1; 
}); 

我知道,一元語句AREN並不總是清楚,但這個很簡單,但可以隨意擴展if語句。

以上的結果是:

print_r($strings); 
Array 
(
    [Date] => 1, 
    [Action] => 1, 
    [2011-01-22 11:23:19] => 2, 
    [SHARE_TWEET] => 1, 
    [SHARE_FACEBOOK] => 1, 
)