3v4l.org

run code in 300+ PHP versions simultaneously
<?php function valueSeparator(array $array) { $maxIterations = count($array); $counted = array_count_values($array); arsort($counted); $iteration = 0; $result = []; while (max($counted) > 1 && $iteration < $maxIterations) { $count = reset($counted); $value = key($counted); $result[] = $value; unset($counted[$value]); arsort($counted); if ($count > 1) { $counted = array_merge( array_splice($counted, 0, 1), [$value => $count - 1], $counted ); } ++$iteration; } array_push($result, ...array_keys($counted)); var_export($result); } $arrays = [ ['Retail', 'Retail', 'Food', 'Food', 'Retail'], ['Retail', 'Retail', 'Food', 'Charity', 'Entertainment', 'Entertainment', 'Transport', 'Cosmetics'], ['Food'], ['Retail', 'Retail', 'Food', 'Retail'], ['Retail', 'Retail', 'Retail', 'Food', 'Food', 'Food', 'Charity', 'Charity', 'Charity'], ['Charity', 'Entertainment', 'Retail', 'Retail' ,'Retail'] ]; foreach ($arrays as $array) { valueSeparator($array); echo "\n---\n"; }

preferences:
48.67 ms | 402 KiB | 5 Q