将2个阵列合并为一个具有平衡2-1比率的阵列

时间:2014-04-27 06:14:21

标签: php arrays while-loop

我有2个数组....让我们称之为red_array和blue_array,我想要做的是创建一个final_array,其中blue_array项目的比率为1比2,而red_array又名

array[]=  { BLUE_ARRAY_ITEM , RED_ARRAY_ITEM, RED_ARRAY_ITEM, 
BLUE_ARRAY_ITEM,RED_ARRAY_ITEM, RED_ARRAY_ITEM, BLUE_ARRAY_ITEM}  ....ect on` 

最好的方法是什么?这是我开始尝试的内容,但它给我的一切都是一个意外的错误

           $total_count=count($blue_query)+count($red_query);

           $count=0;
           $blue_count=0;
           $red_count=0;
           while ($count <= $total_count) {

                if($blue_count<=50){
                    $finished_array[]=$blue_query[$blue_count];
                    $blue_count++;
                    $count++;
                }

                if($red_count<=50){
                    $finished_array[]=$red_query[$red_count];
                    $red_count++;
                    $count++;
                    $finished_array[]=$red_query[$red_count];

                    $red_count++;
                    $count++;
                }


           }

3 个答案:

答案 0 :(得分:3)

尝试 -

<?php
$blue = array(1,4,7,10);
$red = array(2,3,5,6,8,9);

$final_array = array();

for($i=0; $i<sizeof($blue); $i++)
{
    if($i < sizeof($blue))
    {
       $final_array[] = $blue[$i];
    }

    if(($i*2) < sizeof($red))
    {
       $final_array[] = $red[$i*2];
       $final_array[] = $red[($i*2)+1];
    }
}

echo '<pre>'; print_r($final_array);


输出

<pre>Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
   [5] => 6
   [6] => 7
   [7] => 8
   [8] => 9
   [9] => 10
)


DEMO

http://3v4l.org/S4jVS

答案 1 :(得分:1)

尝试以2:1合并,然后将所有剩余项目追加到最后

$b_size = sizeof($blue_arr);
$r_size = sizeof($red_arr);
$size = $b_size + $r_size;
$b_index=0;
$r_index=0;
for($i=0; $i<$size; $i++) {
    if($b_index >= $b_size) {
        $result[$i] = $red_arr[$r_index];
        $r_index++;
    } else if($r_index >= $r_size) {
        $result[$i] = $blue_arr[$b_index];
        $b_index++;
    } else {
        if($i % 3 == 0) {
            $result[$i] = $blue_arr[$b_index];
            $b_index++;
        } else {
            $result[$i] = $red_arr[$r_index];
            $r_index++;
        }
    }
}

如果您希望在其中一个阵列的项目用尽时停止

,请使用此选项
$b_size = sizeof($blue_arr);
$r_size = sizeof($red_arr);
$size = $b_size + $r_size;
$b_index=0;
$r_index=0;
for($i=0; ($b_index < $b_size) || ($r_index < $r_size); $i++) {
    if($i % 3 == 0) {
        $result[$i] = $blue_arr[$b_index];
        $b_index++;
    } else {
        $result[$i] = $red_arr[$r_index];
        $r_index++;
    }
}

答案 2 :(得分:1)

编写此代码以获得蓝色和红色之间的3:2比率,即3蓝色和2红色

    $final_array = array();
    $count = sizeof($blue);
    if(sizeof($red) > sizeof($blue)){
        $count = sizeof($red);
    }

    for($i=0; $i<$count; $i++)
    {
        if(($i*3) < sizeof($blue))
        {
           $final_array[] = $blue[$i*3];
           if(isset($blue[($i*3)+1])){
                $final_array[] = $blue[($i*3)+1];
                if(isset($blue[($i*3)+2])){
                    $final_array[] = $blue[($i*3)+2];
               }
           }
        }

        if(($i*2) < sizeof($red))
        {
           $final_array[] = $red[$i*2];
           if(isset($red[($i*2)+1])){
                $final_array[] = $red[($i*2)+1];
           }
        }
    }