我的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)
数据库结构:
我的目标是为每个用户和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)
我输入的选票完全正确。谢谢你的帮助。
答案 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 - 计算数组中值的总和
$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