There was a recursive join function over at the join documentation on php.net. I wrote a version that was fully recursive on the delimiters, as well as more concise and understandable (IMO).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // original function <?php function joinr( $join , $value , $lvl =0) { if (! is_array ( $join )) return joinr( array ( $join ), $value , $lvl ); $res = array (); if ( is_array ( $value )&&sizeof( $value )&& is_array (current( $value ))) { // Is value are array of sub-arrays? foreach ( $value as $val ) $res [] = joinr( $join , $val , $lvl +1); } elseif ( is_array ( $value )) { $res = $value ; } else $res [] = $value ; return join(isset( $join [ $lvl ])? $join [ $lvl ]: "" , $res ); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // mine <?php function joinr( $delim , $value ) { $cpy = array (); foreach ( $value as $val ) { if ( is_array ( $delim )) $d = count ( $delim ) > 1 ? array_slice ( $delim , 1) : $delim [0]; else $d = $delim ; $cpy [] = is_array ( $val ) ? joinr ( $d , $val ) : $val ; } return join ( is_array ( $delim ) ? $delim [0] : $delim , $cpy ); } $intervals = array ( array (5, array (3,4,5)), array (11, 15), array (22, 24)); echo joinr( array ( "," , "-" , "!" ), $intervals ); // 5-3!4!5,11-15,22-24 ?> |