4

いくつかの配列構造があると想像してください (3 つ提示していますが、できるだけ柔軟にしたいと考えています)。

$array1 = array("red", "red", "red");  

$array2 = array("green", "green", "green", "green"); 

$array3 = array("blue", "blue"); 

これらの配列を一緒にマージして、次のような構造にする必要があります。

Array
(
    [0] => red
    [1] => green
    [2] => blue
    [3] => red
    [4] => green
    [5] => blue
    [6] => red
    [7] => green
    [8] => green
)

アイデアは、すべての配列を反復処理し、要素を 1 つずつマージすることです。配列のいずれかが要素を使い果たした場合、サイクルは通常どおり続行する必要があります。ここで自分自身を最高に説明しているかどうかはわかりません

4

2 に答える 2

2

カウントで count 、 array_push 、および loop を使用する

<?php
$array1 = array("red", "red", "red");  

$array2 = array("green", "green", "green", "green"); 

$array3 = array("blue", "blue"); 
$ArrayLength = array(count($array1),count($array2),count($array3));
$Arrays= array ( $array1,$array2,$array3 );


$MergeArray=array();
$flag=true;
for($i=0;$flag==true;$i++)
{
   $flag=false;
   for($j=0;$j < count($ArrayLength) ; j++)
   {      
       if( $i < $ArrayLength[$j] )
       {
          array_push( $MergeArray , $Arrays[$j][$i] );
          $flag=true;
       }
   }
}
Print_r(  $MergeArray );
?>
于 2013-09-01T20:44:40.860 に答える
0

私は次のようなことを試します:

$result = array();

$array1 = array("red", "red", "red");  

$array2 = array("green", "green", "green", "green"); 

$array3 = array("blue", "blue");

$arrays = array($array1, $array2, $array3); 

$largest = 0;

//Get the largest array
foreach($arrays as $arr): 
    if(count($arr) > $largest)
        $largest = $count; 
endforeach; 

$current = 0; 

while($current <= $largest):
    foreach($arrays as $arr):

        if(count($arr)>0 && $value = array_pop($arr))
            $result[] = $value; 
    endforeach;
endwhile;

ただし、これはおそらくリファクタリングしてより効率的にすることができます

于 2013-09-01T21:04:22.870 に答える