code: public static function unique(array $arr, Comparator $c = null)
      {
          if (!isset($c)) {
              $c = DefaultComparator::getInstance();
          }
          $sorted = self::asort($arr, $c);
          $delKey = array();
          list($lastKey, $lastValue) = each($sorted);
          while (list($key, $value) = each($sorted)) {
              if ($c->compare($value, $lastValue) === 0 && $value == $lastValue) {
                  $delKey[] = $key;
                  continue;
              } else {
                  $lastKey = $key;
                  $lastValue = $value;
              }
          }
          foreach ($delKey as $key) {
              unset($arr[$key]);
          }
          return $arr;
      }
docs: 指定された配列から, 重複した値を取り除いた結果を返します.
  重複かどうかの判定は, 引数に指定されたコンパレータを使って行われます.
  コンパレータが指定されなかった場合は {@link DefaultComparator} が適用されます.
  
  @param  array      $arr
  @param  Comparator $c   コンパレータ
  @return array