Если я правильно понял вашу спецификацию, это должно сработать:
<code><?php
function magicFunction($input) {
$output = array();
sort($input);
$startingCount = count($input);
for ($j=0; $j<count($input); $j++) {
$lastValue = NULL;
for ($i=0; $i<count($input); $i++) {
//var_dump($input[$i]);
if ($input[$i] !== NULL && $input[$i] !== $lastValue) {
$output[] = $input[$i];
$lastValue = $input[$i];
$input[$i] = NULL;
}
}
//echo '<hr />';
if (count($output) == $startingCount) {
break;
}
}
return $output;
}
$array = array('z','a','a','a','b','b','c','c','c','c','d','d','z');
$result = magicFunction($array);
echo '<pre>' . print_r($result, true) . '
';
?>
дает вывод:
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => z
[5] => a
[6] => b
[7] => c
[8] => d
[9] => z
[10] => a
[11] => c
[12] => c
)
Я добавил z
во входной массив (дважды), чтобы мне было легче тестировать.
Вы можете раскомментировать закомментированные строки, чтобы увидеть, как работает моя функция.
Вероятно, есть более эффективный способ сделать это (или, по крайней мере, незначительные изменения производительности в этом методе), но я не собираюсь смотреть на это слишком сильно прямо сейчас, потому что я мог неправильно истолковать ваш вопрос. В любом случае, это не должно иметь значения, если ваш входной массив не очень большой.