从Laravel中的数组中获取出现次数

问题描述 投票:2回答:2

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

php arrays laravel
2个回答
1
投票

如果我明白你想要什么,解决这个问题的方法是:

$sentiments = [
              'positive' => 0,
              'neutral'  => 0,
              'negative' => 0,
            ];

foreach ($posts as $post) {
    $sentiments[$post->sentiment]++;
}

dd($sentiments);

希望能帮助到你...


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');

...将返回与上面代码相​​同的关联数组。

© www.soinside.com 2019 - 2024. All rights reserved.