2016-05-03 36 views
0

我有一個數組,我從數據庫查詢響應中獲取。從數組中計數相同的類別和在新的數組中存儲它的計數和類別名稱

現在我想統計相同的類別並在option_name數組中打印。 我已經嘗試了不同的陣列功能,但想獲得慾望輸出。

我有一個想法,採取新的數組,並推它與foreach循環,但沒有太多的想法,我怎麼能實現使用代碼。請幫我解決它。

Array 
(
    [0] => Array 
     (
      [CNC] => Array 
       (
        [id] => 5 
        [category_id] => 68 
       ) 

      [GVO] => Array 
       (
        [option_name] => Actors 
       ) 

     ) 

    [1] => Array 
     (
      [CNC] => Array 
       (
        [id] => 11 
        [category_id] => 72 
       ) 

      [GVO] => Array 
       (
        [option_name] => Cricketers 
       ) 

     ) 

    [2] => Array 
     (
      [CNC] => Array 
       (
        [id] => 3 
        [category_id] => 72 
       ) 

      [GVO] => Array 
       (
        [option_name] => Cricketers 
       ) 

     ) 

    [3] => Array 
     (
      [CNC] => Array 
       (
        [id] => 4 
        [category_id] => 74 
       ) 

      [GVO] => Array 
       (
        [option_name] => Musician 
       ) 

     ) 

    [4] => Array 
     (
      [CNC] => Array 
       (
        [id] => 7 
        [category_id] => 76 
       ) 

      [GVO] => Array 
       (
        [option_name] => Directors 
       ) 

     ) 

    [5] => Array 
     (
      [CNC] => Array 
       (
        [id] => 6 
        [category_id] => 76 
       ) 

      [GVO] => Array 
       (
        [option_name] => Directors 
       ) 

     ) 
) 

慾望輸出:

Array 
(
    [Actors] => 1 
    [Cricketers] => 2 
    [Musician] => 1 
    [Directors] => 2 
) 

提前感謝!

+0

遍歷該數組,並檢查它是否與存儲在新的數組。 –

+0

我的腳本不幫你嗎? –

+0

是的,它工作得很好。 @FrayneKonok – RJParikh

回答

1

你只需要遍歷數組使用foreach等作爲

$result = []; 
foreach($arr as $k => $v){ 
    if(isset($result[$v['GVO']['option_name']])){ 
     $result[$v['GVO']['option_name']] += 1; 
    }else{ 
     $result[$v['GVO']['option_name']] = 1; 
    } 
} 

print_R($result); 
+0

感謝它工作正常,因爲我預期和想到它。 :) – RJParikh

+0

不客氣。很高興幫助你。 –

1

您可以通過關聯數組遞增計數器,其中的關鍵是算option_nameoption_name

$counts = []; 

foreach($array as $v) { 
    if(!isset($counts[$v['GVO']['option_name']])) { 
     $counts[$v['GVO']['option_name']] = 0; 
    } 

    $counts[$v['GVO']['option_name']]++; 
} 

print_r($counts); 
+0

沒有別的它會在++中給出錯誤,因爲當!isset時它會變爲= 0和++兩者。 – RJParikh

+0

@RuchishParikh你錯了。嘗試代碼,它不會給出錯誤。如果沒有設置密鑰,它會將其初始化爲0,然後用++將其遞增爲1 – FuzzyTree

+0

好吧,讓它讓我試試。 – RJParikh

1

試試這個:

$new_arr = array(); 
foreach(array_column($your_arr, 'option_name') as $value){ 
    if(in_array($value, $new_array)){ 
     $new_array[$value] = $new_array[$value]+1; 
    }else{ 
     $new_array[$value] = 1; 
    } 
} 

輸出

Array 
(
    [Actors] => 1 
    [Cricketers] => 2 
    [Musician] => 1 
    [Directors] => 2 
) 
+0

非常感謝您的幫助。它的工作很好,也可以從你的代碼中得到一些新的嘗試。 – RJParikh