public static function getForString($aString) { if (!isset(self::$cache[$aString])) { $len = strlen($aString); if ($len == 1) { self::$cache[$aString] = array($aString); } else { $results = array(); for ($i = 0; $i < $len; $i++) { $first = $aString[$i]; $rest = substr($aString, 0, $i) . substr($aString, $i + 1); foreach (Permutations::getForString($rest) as $aPermOfRest) { $results[] = $first . $aPermOfRest; } } self::$cache[$aString] = $results; } } return self::$cache[$aString]; }