<?php
$arr1 = array(2,3,4,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12);
$arr2 = array(2,2,3,3,4,4,5,5,6,7,8,9,10,11,12);
$arr3 = array(0,1,2,2,3,3,4,4,5,5,6,7,8,9,10,11,12);

//數列1
$result = repeat_worker($arr1);
echo "    ".implode(',', $arr1)."\n => ";
echo implode(',', $result)."\n";
//數列2
$result = repeat_worker($arr2);
echo "    ".implode(',', $arr2)."\n => ";
echo implode(',', $result)."\n";
//數列3
$result = repeat_worker($arr3);
echo "    ".implode(',', $arr3)."\n => ";
echo implode(',', $result)."\n";

function repeat_worker($arr) {
	$result = array();
	while(count($arr) !== 0) {
		$check = '';
		$tmp = array();
		while (($current = array_shift($arr)) !== null) {
			if ($current === $check) {
				$tmp[] = $current;
			} else {
				$result[] = $current;
				$check = $current;
			}
		}
	}
	$insert_key = isset($tmp[0]) ? $tmp[0] : false;
	if ($insert_key !== false) {
		$pos = array_search($insert_key, $result);
		$right_arr = array_splice($result, $pos);
		$result = array_merge($result, $tmp, $right_arr);
	}
	return $result;
}