in Programming

PHP joinr recursive

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).

// 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);
    }
// 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
?>