You are here

function views_aggregator_range_diff in Views Aggregator Plus 8

Aggregates a field group as a difference between min and max.

Example: 5.5 (min) and 14.9 (max) will render 9.4.

Parameters

array $groups: An array of groups of rows, each group indexed by group value.

object $field_handler: The handler for the view column.

Return value

array An array of values, one for each group, plus the 'column' group.

File

views_aggregator_more_functions/views_aggregator_more_functions.module, line 72
views_aggregator_more_functions.module

Code

function views_aggregator_range_diff(array $groups, $field_handler) {
  $values = [];
  foreach ($groups as $group => $rows) {
    $is_first = TRUE;
    foreach ($rows as $num => $row) {
      $value = views_aggregator_get_cell($field_handler, $num, FALSE);
      if ($is_first) {
        $minimum = $maximum = $value;
        $is_first = FALSE;
      }
      elseif (isset($value) && $value < $minimum) {
        $minimum = $value;
      }
      elseif (isset($value) && $value > $maximum) {
        $maximum = $value;
      }
    }
    $values[$group] = [
      $maximum - $minimum,
    ];
    if (!isset($minimum_column) || $minimum < $minimum_column) {
      $minimum_column = $minimum;
    }
    if (!isset($maximum_column) || $maximum > $maximum_column) {
      $maximum_column = $maximum;
    }
  }
  $values['column'] = [
    $maximum - $minimum,
  ];
  return $values;
}