<?php
$a = Array( 1, 2, 3 );

function combi( $arr, $length ) {
	if( $length == 1 ) {
		return $arr;
	} else {
		$shorter = combi( $arr, $length - 1 );
		
		$new = Array();
		foreach( $shorter as $prefix ) {
			if( strlen( $prefix ) == $length - 1 ) {
				foreach( $arr as $suffix ) {
					$new[] = $prefix . $suffix;
				}
			}
		}
		
		return array_merge( $shorter, $new );
	}
}

var_dump( combi( $a, count( $a ) ) );