2014-04-27 36 views
0

我有2个数组....我们称它们为red_array和blue_array,我想要做的是创建一个具有1比2的blue_array项目比率的final_array ?到red_array又名将2个数组合并为一个具有平衡的2-1比例

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

最新最好的方式去这这是我开始努力,但一切都是为了给我的是一个UNEXPECTED_TOKEN错误

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


      } 
+0

从它的外观来看,当'$ blue_count'在开始时为0时,您将检查'$ blue_count> = 50',所以'if'永远不会被输入,并且在没有'if'的情况下不会增加。你的'while'循环也是无限的,因为不会增加'$ count'。 –

+0

编辑但仍然似乎无限循环....我仍然没有正确递增? – ChuckKelly

+0

你可以粘贴'$ blue_query'和'$ red_query'的内容吗? –

回答

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

+0

作了一些更改。检查编辑。 –

+0

这是行不通的,但是你仍然在抛出未定义的抵消通知。他们不是警告或致命错误,只是通知。我建议使用['array_key_exists()'](http://us3.php.net/array_key_exists)来解决这个问题。像这样的错误可能会导致日志文件混乱,这是调试时最不想做的事情。 –

+0

更正。它现在不会给出抵消错误 –

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

这在理论上对我来说似乎很稳固,但出于某种原因,它给了我这条线的“undefined offest”错误:$ result [$ i] = $ red_arr [$ r_index]; – ChuckKelly

+0

小错误'$ b_index> $ b_size'必须是'$ b_index> = $ b_size'。红色也一样。更新了我的anser –

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]; 
      } 
     } 
    } 
相关问题