Php 以2-1的比例将2个阵列合并为一个阵列

Php 以2-1的比例将2个阵列合并为一个阵列,php,arrays,while-loop,Php,Arrays,While Loop,我有两个数组…让我们称它们为红色数组和蓝色数组,我想做的是创建一个最终的数组,它的蓝色数组项与红色数组项的比率为1:2 array[]= { BLUE_ARRAY_ITEM , RED_ARRAY_ITEM, RED_ARRAY_ITEM, BLUE_ARRAY_ITEM,RED_ARRAY_ITEM, RED_ARRAY_ITEM, BLUE_ARRAY_ITEM} ....ect on` $b_size = sizeof($blue_arr); $r_size = sizeof($

我有两个数组…让我们称它们为红色数组和蓝色数组,我想做的是创建一个最终的数组,它的蓝色数组项与红色数组项的比率为1:2

array[]=  { BLUE_ARRAY_ITEM , RED_ARRAY_ITEM, RED_ARRAY_ITEM, 
BLUE_ARRAY_ITEM,RED_ARRAY_ITEM, RED_ARRAY_ITEM, BLUE_ARRAY_ITEM}  ....ect on` 
$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++;
        }
    }
}
最好的方法是什么?以下是我开始尝试的内容,但它给我的只是一个意外的\u令牌错误

           $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++;
                }


           }
$total\u count=计数($blue\u query)+计数($red\u query);
$count=0;
$blue_count=0;
$red_count=0;
而($count尝试-

试试看-

<?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);

尝试将2:1合并,然后将所有剩余项追加到末尾

    $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];
           }
        }
    }
$b_size=sizeof($blue_arr);
$r_size=sizeof($red_arr);
$size=$b_size+r_size;
$b_指数=0;
$r_指数=0;
对于($i=0;$i=$b_大小){
$result[$i]=$red_arr[$r_index];
$r_index++;
}否则如果($r\u索引>=$r\u大小){
$result[$i]=$blue_arr[$b_index];
$b_index++;
}否则{
如果($i%3==0){
$result[$i]=$blue_arr[$b_index];
$b_index++;
}否则{
$result[$i]=$red_arr[$r_index];
$r_index++;
}
}
}
如果您希望在阵列的某个项目用尽时停止,请使用此选项

$b_size=sizeof($blue_arr);
$r_size=sizeof($red_arr);
$size=$b_size+r_size;
$b_指数=0;
$r_指数=0;
对于($i=0;($b_索引<$b_大小)| |($r_索引<$r_大小);$i++){
如果($i%3==0){
$result[$i]=$blue_arr[$b_index];
$b_index++;
}否则{
$result[$i]=$red_arr[$r_index];
$r_index++;
}
}

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

    $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];
           }
        }
    }
$b_size=sizeof($blue_arr);
$r_size=sizeof($red_arr);
$size=$b_size+r_size;
$b_指数=0;
$r_指数=0;
对于($i=0;$i=$b_大小){
$result[$i]=$red_arr[$r_index];
$r_index++;
}否则如果($r\u索引>=$r\u大小){
$result[$i]=$blue_arr[$b_index];
$b_index++;
}否则{
如果($i%3==0){
$result[$i]=$blue_arr[$b_index];
$b_index++;
}否则{
$result[$i]=$red_arr[$r_index];
$r_index++;
}
}
}
如果您希望在阵列的某个项目用尽时停止,请使用此选项

$b_size=sizeof($blue_arr);
$r_size=sizeof($red_arr);
$size=$b_size+r_size;
$b_指数=0;
$r_指数=0;
对于($i=0;($b_索引<$b_大小)| |($r_索引<$r_大小);$i++){
如果($i%3==0){
$result[$i]=$blue_arr[$b_index];
$b_index++;
}否则{
$result[$i]=$red_arr[$r_index];
$r_index++;
}
}

编写此代码是为了得到蓝色和红色之间的3:2比例,即3蓝色和2红色

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

对于($i=0;$i编写此代码以获得蓝色和红色之间的3:2比率,即3蓝色和2红色

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

对于($i=0;$i从外观上看,您的
if
将永远不会被输入,因为您正在检查
$blue\u count>=50
,而
$blue\u count
在开始时为0,并且在没有
if
的情况下,您的
while
将无限循环,因为没有增加
$count
。您的
已编辑,但似乎仍然被编辑无限循环…我仍然没有正确递增吗?你能粘贴
$blue\u query
$red\u query
的内容吗?从外观上看,你的
if
永远不会被输入,因为你正在检查
$blue\u count>=50
$blue\u count
在开始时为0,并且在没有
if>的情况下永远不会递增
。另外,您的
由于没有增加
$count
,而循环无限。经过编辑,但似乎仍然是无限循环的……我仍然没有正确地增加吗?您可以粘贴
$blue\u query
$red\u query
的内容吗?这确实有效,但是您仍然抛出未定义的偏移通知。它们不是警告或致命错误,只是通知。我建议使用来解决此问题。像这样的错误可能会使日志文件变得混乱,这是调试时最不希望出现的问题。当然!很高兴提供帮助。与其他答案相比,起初我不喜欢此答案。DIN看起来不像第一个答案那么机智,但我可以确认它确实像butter一样工作,而另一个没有。这确实有效,但是您仍然会抛出未定义的偏移量通知。它们不是警告或致命错误,只是通知。我建议使用来解决此问题。类似这样的错误可能会使日志文件变得混乱,这是调试时最不希望看到的。当然!很高兴提供帮助。比较对于另一个答案,一开始我不喜欢这个答案。Dint似乎和第一个答案一样机智,但我可以证实它确实像黄油一样有效,而另一个没有。这在理论上对我来说似乎很可靠,但出于某种原因,它给了我这一行“未定义的offest”错误:$result[$I]=$red_arr[$r_index];小错误
$b_index>$b_size
必须是
$b_index>=$b_size
。红色也是一样。更新了我的答案这在理论上对我来说似乎很可靠,但出于某种原因,这一行给了我“未定义的offest”错误:$result[$i]=$red_arr[$r_index];小错误
$b_index>$b_size
必须是
$b_index>=$b_size
。红色相同。更新了我的答案
    $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];
           }
        }
    }