获取Laravel

时间:2016-02-26 16:18:46

标签: php arrays laravel

我想计算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是我发现能够做到的最接近的事情。还有另一种方式吗?

2 个答案:

答案 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);

希望它有所帮助...