2011-01-28 71 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, 
) 
相关问题