【问题标题】:Count duplicate data and store it to a variable计算重复数据并将其存储到变量中
【发布时间】:2019-09-30 02:38:02
【问题描述】:

我想计算一个数组中的重复数据并将其存储到一个变量中。我设法使用array_count_values() 对其进行计数,但我不知道如何将其存储到变量中。我试图从 'array_count_values()' 访问数组,但它给出了 Undefined offset 的错误

这是我的控制器

 $query  = DB::table("detiltransaksiservice")->leftJoin('service', 'service.kodeService', 'detiltransaksiservice.kodeService')
    ->select('service.keterangan')->get();
    $count  = count($query);
    $kode   = [];
    $query = $query->toArray();
    for($i=0;$i<$count;$i++)
    {
        $kode[$i] = $query[$i]->keterangan;
    }
    $test = array_count_values($kode);
    dd($test[0]);

这里是array_count_values()

我想存储来自array_count_values() 的最大数字,在我的例子中它是 2,而 Service Stang 是一个不同的变量。希望您能够帮助我。谢谢

【问题讨论】:

  • 您打算从查询结果中提取更多数据吗?因为如果不是,您可以直接在查询中执行此操作。

标签: php mysql arrays laravel multidimensional-array


【解决方案1】:

一种可能更好的方法是创建一个查询来为您获取此结果,方法是使用聚合函数 COUNT()GROUP BYHAVING COUNT(*) &gt; 1

$result = DB::table("detiltransaksiservice")->leftJoin('service', 'service.kodeService', 'detiltransaksiservice.kodeService')
    ->select('service.keterangan', DB::raw('COUNT(*) as total'))
    ->groupBy('service.keterangan')
    ->havingRaw("COUNT(*) > 1")
    ->get();

如果你想用 PHP 来做,你可以使用array_filter()

您可以按大于一的计数过滤来自array_count_values() 的结果。鉴于理论上它可能不止一个出现两次以上的条目,因此最好将其保留为索引数组。

$array = ['Service Mesin Ringan' => 1, 'Service Stang' => 2, 'Service Kabel' => 1];
$array = array_filter($array, function($v) { return $v > 1; });
var_dump($array);

输出:

array(1) {
  ["Service Stang"]=>
  int(2)
}

【讨论】:

    【解决方案2】:

    你也可以这样做:

    $query  = DB::table("detiltransaksiservice")
        ->leftJoin(
            'service',
            'service.kodeService',
            'detiltransaksiservice.kodeService'
        )
        ->select('service.keterangan')->get();
    
    $test = $query->filter(
        function ($item) {
            return $item->keterangan === 'Service Stang';
        }
    )->count();
    

    【讨论】:

      【解决方案3】:

      你可以使用collection helper来实现这个\

      $filtered = $query->filter(function ($value, $key) {
          return $value > 1;
      });
      

      Here是它的官方文档。

      注意:建议在$query = $query-&gt;toArray(); 行之前使用。

      【讨论】:

        猜你喜欢
        • 2021-08-20
        • 2023-03-08
        • 1970-01-01
        • 2011-09-18
        • 2020-07-06
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 2021-11-21
        相关资源
        最近更新 更多