计算重复数据并将其存储到变量

时间:2019-05-13 07:00:55

标签: php mysql arrays laravel multidimensional-array

我想计算数组中重复的数据并将其存储到变量中。我设法使用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()

enter image description here

我想存储array_count_values()中最大的数字,在我的情况下,它的2和Service Stang是不同的变量。希望您能够帮助我。谢谢

3 个答案:

答案 0 :(得分:3)

一种可能更好的方法是通过将聚合函数driver.findElement(By.xpath("//a[@id='menu-my-account']")).click(); driver.findElement(By.xpath("//a[@id='edit-info']")).click(); driver.findElement(By.xpath("//input[@id='firstName']")).click(); driver.findElement(By.xpath("//input[@id='firstName']")).sendKeys("Bob"); driver.findElement(By.xpath("//input[@id='lastName']")).click(); driver.findElement(By.xpath("//input[@id='lastName']")).sendKeys("Black"); driver.findElement(By.xpath("//input[@id='emailAddress']")).click(); driver.findElement(By.xpath("//input[@id='emailAddress']")).clear(); driver.findElement(By.xpath("//input[@id='emailAddress']")).sendKeys("jaga4@gmail.info"); driver.findElement(By.xpath("//input[@id='phoneNumber']")).click(); driver.findElement(By.xpath("//input[@id='phoneNumber']")).sendKeys("+380671234567"); driver.findElement(By.xpath("//input[@id='password']")).click(); driver.findElement(By.xpath("//input[@id='password']")).sendKeys("q1w2e3r4t5y6#"); driver.findElement(By.xpath("//input[@id='confirm-modal-btn']")).click(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.MINUTES); driver.findElement(By.xpath("//a[@id='signout']")).click(); COUNT()GROUP BY一起使用来创建为您获取此结果的查询。

HAVING COUNT(*) > 1

但是,如果要使用PHP进行操作,则可以使用$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();

您可以将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);

答案 1 :(得分:3)

您也可以这样做:

$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();

答案 2 :(得分:3)

您可以使用集合助手来实现这一目标\

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

Here是其官方文档。

  

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