public static function Index($Data, $Columns, $Options = array()) {
      $Columns = (array)$Columns;
      $Result = array();
      $Options = array_change_key_case($Options);

      if (is_string($Options))
         $Options = array('sep' => $Options);

      $Sep = GetValue('sep', $Options, '|');
      $Unique = GetValue('unique', $Options, TRUE);

      foreach ($Data as $Row) {
         $IndexValues = array();
         foreach ($Columns as $Column) {
            $IndexValues[] = GetValue($Column, $Row);
         }
         $Index = implode($Sep, $IndexValues);

         if ($Unique)
            $Result[$Index] = $Row;
         else
            $Result[$Index][] = $Row;
      }
      return $Result;
   }