Подсчитать дубликаты данных и сохранить их в переменной - PullRequest
0 голосов
/ 13 мая 2019

Я хочу подсчитать дублированные данные в массиве и сохранить их в переменной. Мне удалось посчитать его, используя 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 ]

2 голосов
/ 13 мая 2019

Вы также можете сделать это:

$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 голосов
/ 13 мая 2019

Для достижения этой цели вы можете использовать помощник по сбору \

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

Здесь является официальной документацией.

Примечание: рекомендуется использовать до $query = $query->toArray(); строки.

2 голосов
/ 13 мая 2019

Вероятно, лучший способ - это создать запрос, который получит этот результат для вас, используя агрегатные функции COUNT() и GROUP BY с HAVING COUNT(*) > 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...