Максимальное вхождение предмета в неделю - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужно просмотреть данные и выяснить максимальное количество вхождений элемента в неделю, например, если в понедельник у вас есть 2 вхождения элемента, а в пятницу 5 вхождений элемента, вы должны создать ассоциативный массив с index = num_week и значением с 5, потому что это максимум недели.

У меня есть следующая структура

    array(5) {
    [0]=>
     object(stdClass)#26 (6) {
      ["num_day"] => string(1) "5"
      ["num_week"] => string(2) "46"
      ["descricao"] => string(5) "Tes"
     }
    [1]=>
     object(stdClass)#27 (6) {
      ["num_day"]=> string(1) "5"
      ["num_week"]=>string(2) "46"
      ["descricao"]=>string(8) "Test"
   }
    [2]=>
     object(stdClass)#28 (6) {
      ["num_day"]=>string(1) "6"
      ["num_week"]=>string(2) "46"
      ["descricao"]=>string(5) "Test"
   }
    [3]=>
     object(stdClass)#29 (6) {
      ["num_day"]=>string(1) "6"
      ["num_week"]=>string(2) "47"
      ["descricao"]=>string(7) "Test"
   }
   [4]=>
     object(stdClass)#30 (6) {
      ["num_day"]=>string(1) "5"
      ["num_week"]=>string(2) "48"
      ["descricao"]=>string(7) "Test"
    }
}

Я сделал это прямо сейчас.

    $count = 0;
    $max_item = [];
    $current_max = 0;
    $old_max = 0;

    for ($i=0; $i < count($array); $i++) {
        for ($j=0; $j < count($array[$i]->num_semana); $j++) {
            if ($j == 0 || $array[$j]->num_semana == $array[$j-1]->num_semana) {
                if ($j == 0 || $array[$j]->num_dia == $array[$j-1]->num_dia) {
                    $current_max++;
                }else{
                    if ($old_max < $current_max) {
                        $old_max = $current_max;
                        if ($i == count($array[$j]->num_semana)) {
                            $max_item = array($array[$j]->num_semana => $old_max);
                        }
                    }
                    $current_max = 1;
                }
            }else{
                var_dump($old_max);
                $max_item = array($array[$j]->num_semana => $old_max);
                $current_max=1;
            }
        }
    }

Возвращение

print_r($ativ_max) // Array ( [48] => 1 ) 

Он возвращает только максимальное значение прошлой недели (48) и игнорирует недели 46 и 47.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Попробуй это.Сначала создайте ассоциативный массив, где номера вашей недели являются ключами, а затем получите максимум для каждого элемента этого массива.

$weeks = Array();
$result = Array();
foreach($structure as $item){
    isset($weeks[$item->num_week]) ? 
        $weeks[$item->num_week][] = $item->num_day :
        $weeks[$item->num_week] = Array($item->num_day); 
}
foreach($weeks as $week_no => $week){
    $result[$week_no] = max($week);
}
var_dump($result)
0 голосов
/ 19 ноября 2018

Этот код сначала создает массив с неделей в качестве первого измерения и днем ​​во втором, считая вхождения по мере прохождения через ваши исходные данные.

Затем, чтобы получить максимум, он просто проходит черезнедели и использует array_map() и max(), чтобы получить наибольшее значение за все дни ...

$data = [(object)["num_day" => 1, "num_week" => "2" ],
    (object)["num_day" => 1, "num_week" => "2" ],
    (object)["num_day" => 2, "num_week" => "2" ],
    (object)["num_day" => 4, "num_week" => "2" ],
    (object)["num_day" => 4, "num_week" => "2" ],
    (object)["num_day" => 4, "num_week" => "2" ],
    (object)["num_day" => 4, "num_week" => "3" ],
    (object)["num_day" => 4, "num_week" => "3" ],
    (object)["num_day" => 4, "num_week" => "4" ]
];

$count = [];
foreach ( $data as $date )  {
    if ( !isset ($count[$date->num_week][$date->num_day]))  {
        $count[$date->num_week][$date->num_day] = 1;
    }
    else {
        $count[$date->num_week][$date->num_day]++;
    }
}

$final = array_map("max", $count);
print_r($final);

распечатывается с тестомданные ...

Array
(
    [2] => 3
    [3] => 2
    [4] => 1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...