我想计算Laravel PHP中数组中特定值出现的次数
我试过这样的
$posts = RedditPosts::where('search_identifier', $search_id)->get();
$sentimentPost = array_count_values($posts->sentiment);
dd($sentimentPost);
我收到此错误
Undefined property: Illuminate\Database\Eloquent\Collection::$sentiment
我的表中有一个名为'情绪'的字段,它是正面的,中性的或负面的。
我想要做的是查明每个对象的整体情绪是正面的,中性的还是负面的,并将该变量解析为可以显示的视图。
所以基本上我想要算一下假设,消极和中立从结果中出现多少次,这样我就可以将它们相互比较,并找出整体情绪是积极的,消极的还是中性的。在DB中我有很多列,即帖子,情感等。
array_count_values是我发现能够做到的最接近的事情。还有另一种方式吗?
答案 0 :(得分:2)
只需调用集合count
方法:
$count = $posts->count();
如果你需要的只是计数,你可以直接在数据库中进行:
$count = RedditPosts::where('search_identifier', $search_id)->count();
如果您想要计算每个情绪,您可以按情绪分组,然后将值映射到他们的计数:
$counts = $posts->groupBy('sentiment')->map->count();
...这会给你每个情绪的计数:
dd($counts->all()); // ['positive' => 4, 'negative' => 2, 'neutral' => 9]
或者,您可以直接在数据库中进行所有分组和计数:
RedditPosts::where('search_identifier', $search_id)
->selectRaw('sentiment, COUNT(*) as count')
->groupBy('sentiment')
->pluck('count', 'sentiment');
...将返回与上述代码相同的关联数组。
答案 1 :(得分:1)
如果我明白你想要什么,解决这个问题的方法是:
$sentiments = [
'positive' => 0,
'neutral' => 0,
'negative' => 0,
];
foreach ($posts as $post) {
$sentiments[$post->sentiment]++;
}
dd($sentiments);
希望它有所帮助...