2013-09-22 38 views
0

我讀了一些線程,但沒有一個看起來與我需要的匹配。 我在做什麼,像投票系統,但目前不包括MySQL。如何使用php來統計相同的數組?

我製作了三個單選按鈕,分別爲pop,rock,metallic和a提交 ,因此無論哪個人選擇其中一個並提交數據,都會寫入data.json並存儲在那裏。

然後我有一個頁面來加載data.json文件中的所有數據,但我想要統計有多少人選擇了例如金屬和有多少人選擇了搖滾。

目前我還在測試,我真的想到了一個想法,但不知何故被搜查,沒有得到我想要的.....可有人給我一隻手嗎?

這是我data.json文件

{"type":"metallic"} 
{"type":"pop"} 
{"type":"metallic"} 

,這是我的結果代碼是目前

<?php 
$file = fopen('data.json', "r");  

$array_record = array(); 

while(!feof($file))      
{ 
    $line = fgets($file);     
    $data = json_decode($line, TRUE);  

    if (is_array($data))     
    {     
     foreach ($data as $key => $value) 
     { 
      // echo $key.'='.$value.' ';  // show key=value pairs 
      $array_record += array($value,); 
      var_dump($data); 
      print_r($data); 
      echo $value; 

     } 
     echo '<br>'.PHP_EOL;    
    } 
} 


fclose($file);       
?> 

我所知道的代碼是凌亂的,因爲我想建立一個空數組首先得到$value這是金屬類似的東西,所以我可以使用array_count_values,但我做的方式似乎完全錯誤或永遠不會工作。我嘗試了其他幾種方法來獲得金屬/流行音樂,所以我可以嘗試計算同樣的事情。

AH!我剛剛發現這個話題How to filter JSON array into PHP array

明天我要讀這個主題,看看它是否有幫助。 但是,如果你也可以幫我一把,它也不會受到傷害。

回答

1

Keep in mind the JSON you have posted is a not a valid JSON.

array_reduce

<?php 
$json = '[{"type":"metallic"},{"type":"pop"},{"type":"metallic"}]'; 
$result = array_reduce(json_decode($json,TRUE), 
    function($v, $item) 
    { 
     if (!array_key_exists($item['type'], $v)) 
      $v[$item['type']] = 1; 
     else 
      $v[$item['type']]++; 
     return $v; 
    }, array() 
); 
print_r($result); 

Live DEMO.

+0

使用JSON全新的,但之後,你告訴我,這是無效的我搜索周圍,我知道你的意思,但奇怪我使用json_encode來存儲到data.json文件中,我粘貼的是存儲在data.json中的內容,並且解碼器確實讀取了數據。 – WXR

+0

感謝您的信息,不完全瞭解它完全特別。 $ v [$ item ['type']]部分,但我會做更多的研究〜! – WXR

+0

@ user2128405'$ v'是回調結果,所以回傳給'$ result'的是'$ v'和'$ v [$ item ['type']]''意味着我們在每個' $ v'的值或'$ item ['type']',在你的情況'metallic'和'php'中,並且每次找到相同類型時該值都會增加。 [它也在這裏詳細說明](http://www.php.net/manual/en/function.array-reduce.php) – Prix

相關問題