【问题标题】:Get number of occurences from an array in Laravel从 Laravel 中的数组中获取出现次数
【发布时间】:2016-06-09 23:04:51
【问题描述】:

我想在 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

我的表格中有一个名为“情绪”的字段,它可以是正面的、中性的或负面的。

我想做的是找出每个对象的整体情绪是积极的、中性的还是消极的,并将该变量解析为可以显示的视图。

因此,基本上我想计算从结果中出现正面、负面和中性的次数,以便我可以将它们相互比较,并找出整体情绪是正面、负面还是中性。在数据库中,我有很多列,即帖子、情绪等。

array_count_values 是我发现能够做到这一点的最接近的东西。还有其他方法吗?

【问题讨论】:

    标签: php arrays laravel


    【解决方案1】:

    只需调用集合的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');
    

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

    【讨论】:

      【解决方案2】:

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

      $sentiments = [
                    'positive' => 0,
                    'neutral'  => 0,
                    'negative' => 0,
                  ];
      
      foreach ($posts as $post) {
          $sentiments[$post->sentiment]++;
      }
      
      dd($sentiments);
      

      希望对你有帮助...

      【讨论】:

      • 你是一个活着的传奇!
      • 我很高兴能提供帮助! :)
      猜你喜欢
      • 2013-04-20
      • 1970-01-01
      • 2012-06-23
      • 2011-04-16
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      相关资源
      最近更新 更多