<?php

function zip() {
    $params = func_get_args();
    if (count($params) === 1){
        // single iterable passed
        $result = array();
        foreach ($params[0] as $item){
            $result[] = array($item);
        };
        return $result;
    };
    $result = call_user_func_array('array_map', array_merge(array(null), $params));
    $length = min(array_map('count', $params));
    return array_slice($result, 0, $length);
};

$a1 = array(1,2,3,4,5);
$a2 = array('a','b');
$a3 = array('x','y','z');

$b1 = $a1;
$b2 = $a2;

$c1 = array(1,2,3,4,5);

echo "\n== Test 1 ==\n";
var_dump(zip($a1, $a2, $a3));
echo "\n== Test 2 ==\n";
var_dump(zip($b1, $b2));
echo "\n== Test 3 ==\n";
var_dump(zip($c1));