Hola,
Bueno, para 2 es relativamente sencillo. Solo tienes que coger los elementos de 1 a n-1, y emparejarlo con los elemento de i+1 a n, siendo n el numero total de elementos, e i el elemento en curso.
Como estamos en PHP, aqui va el codigo en dicho lenguaje:
Código PHP:
$a=array('a','b','c','d');
$n=count($a);
for($i=0;$i<($n-1);$i++) {
for($j=($i+1);$j<$n;$j++) {
echo $a[$i].' - '.$a[$j].'<br>';
}
}
si no tengo oxidado el cerebro.
Para 3 supongo que sera añadir un nivel mas de anidamiento.
Por supuesto, ya habra un algoritmo generico para r elementos. Intenta buscar 'algoritmo combinatoria' o 'metodos numericos combinatoria' en google.
Saludos.
PD: Si no lo querias en PHP, lo dices y muevo el mensaje al foro de programacion.