2017-02-22 5 views
-1

У меня есть массив, который содержит несколько объектов, некоторые из этих объектов может иметь соответствующие значения для lap_time, в этом примере элемент 1 и 2 имеют соответствующие значения:Найти элементы массива с соответствующими значениями

Array 
(
    [0] => stdClass Object 
     (
      [id] => 1 
      [recorded_time] => 00:51:55.000000 
      [corrected_time] => 00:45:32.456140 
      [lap_time] => 00:09:06.491228 
      [laps] => 5 
      [code] => 
      [sail_no] => 4931 
      [class] => SOLO 
      [helm_fname] => [Removed] 
      [helm_lname] => [Removed] 
      [crew_1_fname] => 
      [crew_1_lname] => 
      [crew_2_fname] => 
      [crew_2_lname] => 
      [modified_time] => 
      [created_time] => 2017-02-19 17:53:48 
      [created_fname] => Admin 
      [created_lname] => istrator 
      [modified_fname] => 
      [modified_lname] => 
      [points] => 1 
     ) 

    [1] => stdClass Object 
     (
      [id] => 21 
      [recorded_time] => 00:50:07.000000 
      [corrected_time] => 00:45:56.186984 
      [lap_time] => 00:09:11.237397 
      [laps] => 5 
      [code] => 
      [sail_no] => 67173 
      [class] => LASER 
      [helm_fname] => [Removed] 
      [helm_lname] => [Removed] 
      [crew_1_fname] => 
      [crew_1_lname] => 
      [crew_2_fname] => 
      [crew_2_lname] => 
      [modified_time] => 2017-02-22 10:51:58 
      [created_time] => 2017-02-19 18:40:58 
      [created_fname] => Admin 
      [created_lname] => istrator 
      [modified_fname] => 
      [modified_lname] => 
      [points] => 2 
     ) 

    [2] => stdClass Object 
     (
      [id] => 2 
      [recorded_time] => 00:50:07.000000 
      [corrected_time] => 00:45:56.186984 
      [lap_time] => 00:09:11.237397 
      [laps] => 5 
      [code] => 
      [sail_no] => 52441 
      [class] => LASER 
      [helm_fname] => [Removed] 
      [helm_lname] => [Removed] 
      [crew_1_fname] => 
      [crew_1_lname] => 
      [crew_2_fname] => 
      [crew_2_lname] => 
      [modified_time] => 2017-02-22 10:51:58 
      [created_time] => 2017-02-19 18:40:58 
      [created_fname] => Admin 
      [created_lname] => istrator 
      [modified_fname] => 
      [modified_lname] => 
      [points] => 3 
     ) 

Если какой-либо объекты имеют соответствующие значения для lap_time, соответствующие объекты должны усреднять свои точки.

Это то, что я начал делать, но я понял, что это, вероятно, не самый лучший способ сделать это. Метод break_race_ties не завершен.

<?php 

class Results_calculations_model 
{ 
    public 
    function race_points($results) 
    { 
     $points = 0; 
     $results_with_points = array(); 

     foreach ($results AS $result) { 
      //increment points by one for each position 
      $points++; 
      $result->points = $points; 

      //add result back to array; 
      $results_with_points[] = $result; 
     } 


     $results_with_points = $this->break_race_ties($results_with_points); 

     return $results_with_points; 
    } 

    protected 
    function break_race_ties($results) 
    { 
     $previous_time = 0; 
     $ties = array(); 

     foreach ($results AS $result) { 

      if ($previous_time === $result->lap_time) { 
       $ties['points'][] = $result->points; 
       $ties['id'][] = $result->id; 

       $average_points = $this->average_array_values($ties['points']); 
      } 


      $previous_time = $result->lap_time; 
     } 
    } 

    protected 
    function average_array_values($values) 
    { 
     $number_of_elements = count($values); 
     $total_points = array_sum($values); 

     return $total_points/$number_of_elements; 
    } 
} 

Можете ли вы предложить какие-либо функции, которые могли бы помочь мне с этим, или пример кода, что делать

ответ

0

Вот что я в конечном итоге делает

0

Попробуйте это ..

class Results_calculations_model 
{ 
    public 
    function race_points($results) 
    { 
     $results_with_points = $this->break_race_ties($results); 

     return $results_with_points; 
    } 

    protected 
    function break_race_ties($results) 
    { 
    $previous = null; 
    foreach($results as &$current) { 
     if(!empty($previous)) { 
     $this->average_array_values($current, $previous); 
     } 
     $previous = $current; 
    } 
    } 

    protected 
    function average_array_values(&$current, &$previous) 
    { 
     if($current->lap_time == $previous->lap_time) { 
      $avg = ($current->points + $previous->points)/2; 
      $current->points = $previous->points = $avg; 
     } 
    } 
} 
+0

Будет ли это работать, если для одного «lap_time» присутствуют 3 или более галтеля? –

Смежные вопросы