<?php class Foo { public function combinations(array $values): array { $combinations = []; foreach ($values as $value1) { foreach ($values as $value2) { if ($value1 == $value2) { continue; } $pair = [$value1, $value2]; sort($pair); $key = sprintf('%s::%s', $pair[0], $pair[1]); if (!array_key_exists($key, $combinations)) { $combinations[$key] = $pair; } } } return array_values($combinations); } } $foo = new Foo(); print_r($foo->combinations(['a', 'b', 'c', 'd']));