2014-02-26 39 views
0

我正在寻找一种方法来计算数组数组上的出现次数。计算多个PHP数组上的出现次数

这是我的数组:

Array 
(
[0] => Array 
    (
     [id] => 671 
     [title] => BIEND 
     [img] => 
     [ville] => marseille 
    ) 

[1] => Array 
    (
     [id] => 670 
     [title] => BIENC 
     [img] => 
     [ville] => avignon 
    ) 

[2] => Array 
    (
     [id] => 669 
     [title] => BIENB 
     [img] => 
     [ville] => avignon 
    ) 

) 

而我想有:

Array 
(
[avignon] => 2 
[marseille] => 1 
) 

我array_count_values试过,但它不似乎是不错的方法。

有什么想法?

回答

2

你可以只通过它去手动:

$result = array(); 
foreach($input as $item) 
{ 
    $result[$item['ville']]++; 
} 

,或者略微更好也许,

$result = array(); 
foreach($input as $item) 
{ 
    $city = $item['ville']; 
    if(!array_key_exists($city, $result)) { 
    $result[$city] = 1; 
    } else { 
    $result[$city]++; 
    } 
} 

或者,你可以做一些array_map魔术先得到一个数组的所有城市,然后按照您的计划使用array_count_values:

$cities = array_count_values(array_map(function($a) { return $a['ville']; })); 

注意,我的天堂我没有测试过这个最后的解决方案,我个人认为第一个更好地表达了这个意图。如果你想用这一个,因为它是短(即不易阅读)我将让你来调试和评论它

+1

FYI,由于PHP 5.5可以通过['array_column()'](http://us3.php.net/manual/en/function.array-column.php)_pluck_值否则,一旦你习惯了函数式编程的基础知识,[每个人都应该使用imo ^^],简洁的'array_map'肯定是可读和可理解的。 – moonwave99

1

您可以使用array_reduce()

$data = Array 
(
0 => Array 
    (
     'id' => 671, 
     'title' => 'BIEND', 
     'img' => '', 
     'ville' => 'marseille' 
    ) 
, 
1 => Array 
    (
     'id' => 670, 
     'title' => 'BIENC', 
     'img' => '', 
     'ville' => 'avignon' 
    ) 
, 
2 => Array 
    (
     'id' => 669, 
     'title' => 'BIENB', 
     'img' => '', 
     'ville' => 'avignon' 
    ) 

); 

$result = array_reduce($data, function(&$cur, $x) 
{ 
    $cur[$x['ville']] = isset($cur[$x['ville']])?$cur[$x['ville']]+1:1; 
    return $cur; 
}, []); 
-1

我就喜欢写东西这个。数组和子数组应该根据其内容重新命名。

$villes = array(); 

    foreach($yourArray as $subArray) { 
     if(!in_array($subArray['ville'], $villes)) { 
      $villes[$subArray['ville']] = 1; 
     } else { 
      $villes[$subArray['ville']]++; 
     } 
    } 

    var_dump($villes); 
+0

froeach?我不认为这会起作用 –

0
$my_array = array(...); 
$result = array(); 

foreach ($my_array as $arr) { 
    $key = $arr['ville']; 
    if (! array_key_exists($key, $result){ 
     $result[$key] = 1; 
     continue; 
    } 
    $result[$key] += 1; 
} 
+0

请解释你的答案如何解决手头的问题。 – War10ck