Это работает точно так же, как zip()
функция Python , и совместимо также с PHP <5.3: </p>
function zip() {
$params = func_get_args();
if (count($params) === 1){ // this case could be probably cleaner
// 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);
};
Объединяет массивы так, как это делает zip()
в Python, и не возвращает элементы, найденные после достижения конца самого короткого массива.
Следующее:
zip(array(1,2,3,4,5),array('a','b'));
дает следующий результат:
array(array(1,'a'), array(2,'b'))
и следующее:
zip(array(1,2,3,4,5),array('a','b'),array('x','y','z'));
дает следующий результат:
array(array(1,'a','x'), array(2,'b','y'))
Проверьте эту демонстрацию для доказательства вышесказанного.
EDIT : добавлена поддержка для получения одного аргумента (array_map
ведет себя иначе в этом случае; спасибо Josiah ).