我想计算数组中重复的数据并将其存储到变量中。我设法使用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是不同的变量。希望您能够帮助我。谢谢
答案 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();
行之前使用。