algoritmo que pegará números ou palavras e encontrará todas as combinações possíveis

Eu estou procurando por um algoritmo que pegue números ou palavras e encontre todas as variações possíveis deles juntos e também deixe-me definir quantos valores procurar juntos.

Exemplo, vamos dizer que a string ou array é:

cat  
dog  
fish  

então os resultados para um valor de 2 poderiam ser:

cat dog  
cat fish  
dog cat  
dog fish  
fish cat  
fish dog   

SO os resultados do conjunto de 3 itens são 6 variações possíveis em 2 resultados correspondentes
com 3 resultados correspondentes, seria:

cat dog fish  
cat fish dog  
dog cat fish  
dog fish cat  
fish cat dog  
fish dog cat  

... provavelmente mais opções até

Eu encontrei um link no Stackoverflow para este exemplo que faz isso, mas é em javascript, estou querendo saber se alguém sabe como fazer isso no PHP talvez haja algo já construído?

http://www.merriampark.com/comb.htm (link morto)