PHP 5.5 ソリューション:
$array1 = array('a', 'b', 'c', 'd');
$array2 = array('e', 'f', 'g', 'h');
$array3 = array('i', 'j', 'k', 'l');
$composite = array($array1, $array2, $array3);
$count = count($array1);
$result = array();
for ($i = 0; $i < $count; $i++) {
$result = array_merge($result, array_column($composite, $i));
}
var_dump($result);
編集
または、5.5 より前のバージョンの PHP で動作する別の代替手段
$array1 = array('a','b','c','d');
$array2 = array('e','f','g','h');
$array3 = array('i','j','k','l');
$composite = array($array1, $array2, $array3);
// transpose
array_unshift($composite, null);
$tmpResult = call_user_func_array('array_map', $composite);
// flatten
$result = call_user_func_array('array_merge', $tmpResult);
var_dump($result);
編集#2
この 2 番目の方法を使用すると、最初の配列が可変長である場合、最終結果で「パディングされた」NULL エントリが得られます。これらが不要な場合は、array_filter(); を使用して削除できます。
$array1 = array('a','b','c','d','x','u','xx');
$array2 = array('e','f','g','h','s','d','t');
$array3 = array('i','j','k','l');
$composite = array($array1, $array2, $array3);
// transpose
array_unshift($composite, null);
$tmpResult = call_user_func_array('array_map', $composite);
// filter and flatten
$result = array_filter(
call_user_func_array('array_merge', $tmpResult),
function ($value) {
return $value !== NULL;
}
);
var_dump($result);