Есть ли встроенная функция PHP для zip слияния двух массивов?
Посмотрите на следующий пример:
$a = array("a","b","c"); $b = array("d","e","f"); $c = array("g","h","i"); var_dump(array_merge($a,$b,$c));
Это дает:
array(9) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" [4]=> string(1) "e" [5]=> string(1) "f" [6]=> string(1) "g" [7]=> string(1) "h" [8]=> string(1) "i" }
Однако я хочу:
array(9) { [0]=> string(1) "a" [1]=> string(1) "d" [2]=> string(1) "g" [3]=> string(1) "b" [4]=> string(1) "e" [5]=> string(1) "h" [6]=> string(1) "c" [7]=> string(1) "f" [8]=> string(1) "i" }
Поэтому я написал свою собственную – проверенную рабочую функцию:
function array_zip(...$arrays) { $res = array(); while(true) { $check_finish = true; foreach($arrays as $array) { if(!empty($array)) { $check_finish = false; } } if($check_finish) { break; } else { foreach($arrays as $key => $array) { if(!empty($array)) { array_push($res,array_shift($array)); $arrays[$key] = $array; } } } } return $res; }
Однако есть ли встроенная функция PHP для объединения таких массивов (возможно, более результативная)? И есть ли для этой цели встроенная функция PHP, которая сохраняет ключи, но сохраняет порядок? Не нашел sth: – /
Для этой цели нет родной функции PHP. Однако, согласно комментарию @Mark Baker, существует небольшая возможность реализовать это:
$a = array("a","b","c"); $b = array("d","e","f"); $c = array("g","h","i"); function array_zip(...$arrays) { return array_merge(...array_map(null, ...$arrays)); } var_dump(array_zip($a,$b,$c));