2014-02-26 59 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