Сортировка массивов и сравнение значений массивов php - PullRequest
0 голосов
/ 08 мая 2020

Доброго времени суток, ребята, я работаю над нанесением данных на графики с помощью Chart Js и Laravel, мне нужно построить данные по месяцам, и я хочу, чтобы все 12 месяцев отображались на графике даже без данных,

У меня есть месяцы в массиве ['Январь', 'Февраль' ....

Тогда мои данные здесь:

     $stats = DB::table('wallet_payouts')
        ->groupBy('date')
        ->orderBy('date', 'ASC')
        ->get([
            DB::raw('DATE_FORMAT(created_at, "%M") as date'),
            DB::raw('COUNT(*) as value')
        ]);

    $labels = [];
    $data = [];
    foreach ($months as $month){
        foreach ($stats as $stat){
            if ($month == $stat->date){
                array_push($labels, $stat->date);
                array_push($data, $stat->value);
            }else{
                array_push($labels, $month);
                array_push($data, 0);
            }
        }
    }

Но проблема в том, через 12 месяцев после l oop Я получаю 24 ... Дубликаты и данные также через 24 ... Я хочу, чтобы месяцы просто совпадали с данными без дубликатов

1 Ответ

0 голосов
/ 08 мая 2020

Попробуйте следующий код:

$stats = DB::table('wallet_payouts')
        ->groupBy('date')
        ->orderBy('date', 'ASC')
        ->get([
            DB::raw('DATE_FORMAT(created_at, "%M") as date'),
            DB::raw('COUNT(*) as value')
        ]);

$labels = $months;
$data = [];
$temp = [];
foreach ($stats as $stat){
    $temp[$stat->date] = $stat->value;
}
foreach($months as $month){
    if(array_key_exists($month,$temp)){
        array_push($data, $temp[$month]);
    } else {
        array_push($data, 0);
    }
}
...