PHP JSON在同一个数组中计算值

时间:2014-01-05 15:25:18

标签: php mysql json pdo laravel

我的php脚本中有一个使用json_encode php函数编码的json对象。

以下是var_dumped ...

时的对象
string '{"voting_sys":"50","beta_site":"50"}' (length=36)
string '{"voting_sys":"50","beta_site":"50"}' (length=36)

数据库结构:Database Structure

我的目标是为每个用户和beta_site获取voting_sys中的值的总和...这将用于投票,但用于未知数量的功能/值。

有什么想法吗?我试过以下......

$voters = DB::table('votes')->get();
    foreach($voters as $vote){
            $vote_array[$voter->user_id]=json_decode($voter->value, true);
    }
    var_dump($vote_array);

这将解码的json对象返回到数组。 我会分配" voting_sys"作为数组的键,然后将整数值赋给数组的值,但是会有未知数量的功能。在此示例中,用户只能投票选出两个功能,但以后可能会有更多功能。我使用功能ID推出了一组用户可以投票的新功能。

我正在使用Laravel 4.1

[编辑:结果]

    $feature_list = DB::table('features')->where('rev_id', Config::get('app.beta_rev'))->get();
    $feature_array=array();
    foreach ($feature_list as $feature){
        array_push($feature_array, $feature->name);
    }
    foreach($feature_array as $feature){
        $voters = DB::table('votes')
                 ->select(DB::raw('sum(value)'))
                 ->where('feature_name', '=', $feature)
                 ->get();
                 echo $feature.' - ';
                 var_dump($voters);
                 echo '<br />';
    }

在调用时,转储:

voting_sys -
array (size=1)
  0 => 
    object(stdClass)[248]
      public 'sum(value)' => string '149' (length=3)

beta_site -
array (size=1)
  0 => 
    object(stdClass)[249]
      public 'sum(value)' => string '69' (length=2)

我输入的选票完全正确。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我建议使用略有不同的数据库结构。在数据库中序列化/ json_encode数据几乎绝不是一个好主意。由于您已经拥有一张专用的投票表,因此您可以很容易地将您的表格从当前的表格更改为以下内容:

id | user_id | feature | value
------------------------------
1  |       2 | sys     |    50
2  |       2 | beta    |    40
3  |       3 | sys     |    50

这会使计算变得非常简单:

SELECT SUM(value) FROM table WHERE feature = 'sys'

答案 1 :(得分:1)

使用array_sum

  

array_sum - 计算数组中值的总和

$voters = DB::table('votes')->get(); // get the JSON response response 


$jsonDecodedArray = json_decode($voters,true); // decode the JSON

$sum = array_sum($jsonDecodedArray); // Use php array_sum