如何使用php来计算相同的数组?

时间:2013-09-22 09:22:50

标签: php arrays json loops

我读了一些线程,但它们似乎都不符合我的要求。 我正在尝试做的事情就像投票系统,但目前不包括mysql。

我制作了三个音乐类型的单选按钮,包括pop,rock,metal和提交 所以无论一个人选择其中任何一个并提交数据都写入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 个答案:

答案 0 :(得分: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.