1

この形式のような3つの配列があります

$array1 = array(a,b,c,d);
$array2  = array(e,f,g,h);
$array3  = array(i,j,k,l);

この3つの配列を列形式でマージする必要があります

私の期待される結果

array(a,e,i,b,f,j,c,g,k,d,h,l);

これどうやってするの。私はすでに配列のマージを行っています。しかし、そのマージ行形式。しかし、列形式が必要です。

お知らせ下さい

更新しました

$array1 = array(a,b,c,d,x,u,xx);
$array2  = array(e,f,g,h,s,d,t);
$array3  = array(i,j,k,l);
4

4 に答える 4

1

ここで答えを見つけました。

これが機能する各配列内の要素の数に関係なく、この関数を次のように使用します。

array_interlace($array1, $array2, $array3)

function array_interlace() {
    $args = func_get_args();
    $total = count($args);

    if($total < 2) {
        return FALSE;
    }

    $i = 0;
    $j = 0;
    $arr = array();

    foreach($args as $arg) {
        foreach($arg as $v) {
            $arr[$j] = $v;
            $j += $total;
        }

        $i++;
        $j = $i;
    }

    ksort($arr);
    return array_values($arr);
} 

更新された質問の結果:

Array ( [0] => a [1] => e [2] => i [3] => b [4] => f [5] => j [6] => c [7] => g [8] => k [9] => d [10] => h [11] => l [12] => x [13] => s [14] => u [15] => d [16] => xx [17] => t ) 
于 2013-08-22T12:36:58.957 に答える
1

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);
于 2013-08-22T12:31:19.777 に答える
0

これを試して

$sorted array = sort(array_merge( (array) $array1, (array) $array2 , (array) $array3)
于 2013-08-22T12:28:44.637 に答える