合并并重新排序 3 个数组


merge and reorder 3 arrays

我不知道如何命名这个,以及如何做:

<?php
    $a = ['a1','a2','a3','a4']; // and more a5 … a42
    $b = ['b1','b2','b3','b4'];
    $c = ['c1','c2','c3','c4'];
// want
$full = ['a1','b1','c1',
         'c2','a2','b2',
         'b3','c3','a3',
         'a4','b4','c4'];
print_r($full);

就像a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,是一个数学级数?

需要合并所有数组,请浏览此 PHP 代码。

$a = array('a1','a2','a3','a4'); // and more a5 … a42
$b = array('b1','b2','b3','b4');
$c = array('c1','c2','c3','c4');    
$d = array_merge($a,$b,$c); 
echo mathseries($d,3);
function mathseries($d=array(),$break_number) {
    $f =  count($d) / $break_number;
    for($i=0;$i<$f;$i++) {
        $r[] = $d[$i].','.$d[$i+$f].','.$d[$i+($f*2)];
    }
    $r = implode(',',$r);
    return $r;
}

创建一个函数,其中两个参数发送,第一个参数数组。 第二个参数是断点。

 $arr = [$a, $b, $c];    
 $full = [];
 $i = 0;
 $k = 0;
for ($j = 0; $j < count($a); $j++)
   do {
     $full[] = $arr[$k][$j];
     $i = ++$i % 3;
     if ($i) $k = ++$k % 3;
     } while ($i);
 print_r($full);   

演示

首先,我们创建一个包含三个原始数组的多维数组,然后通过两个嵌套的for循环填充目标$result

$all    = [ $a, $b, $c ];
$result = [];
for( $i=0; $i<count( $a ); $i++ )
{
    for( $j=0; $j<count( $all ); $j++ )
    {
        $result[] = $all[ 3*(($i+$j*2)%3>0)-(($i+$j*2)%3) ][ $i ];
    }
}

3v4l.org 演示

为了填充$result,第二个键[$i]是每个原始数组的渐进式索引(0, 1, 2, ...);为了创建第一个键,我们使用这个算法:

 3 * ( ($i + $j * 2 ) % 3 > 0 ) - ( ( $i + $j * 2 ) % 3 )       $i  $j
 --------------------------------------------------------
 3 * ( ( 0 +  0 * 2 ) % 3 > 0 ) - ( (  0 +  0 * 2 ) % 3 )        0   0
 3 * ( (          0 ) % 3 > 0 ) - ( (           0 ) % 3 )      
 3 * (                      0 ) - (                   0 ) =  0
 3 * ( ( 0 +  1 * 2 ) % 3 > 0 ) - ( (  0 +  1 * 2 ) % 3 )        0   1
 3 * ( (          2 ) % 3 > 0 ) - ( (           2 ) % 3 )      
 3 * (                      1 ) - (                   2 ) =  1
 3 * ( ( 0 +  2 * 2 ) % 3 > 0 ) - ( (  0 +  2 * 2 ) % 3 )        0   2
 3 * ( (          4 ) % 3 > 0 ) - ( (           4 ) % 3 )      
 3 * (                      1 ) - (                   1 ) =  2
 --------------------------------------------------------
 3 * ( ( 1 +  0 * 2 ) % 3 > 0 ) - ( (  1 +  0 * 2 ) % 3 )        1   0
 3 * ( (          1 ) % 3 > 0 ) - ( (           1 ) % 3 )      
 3 * (                      1 ) - (                   1 ) =  2
 3 * ( ( 1 +  1 * 2 ) % 3 > 0 ) - ( (  1 +  1 * 2 ) % 3 )        1   1
 3 * ( (          3 ) % 3 > 0 ) - ( (           3 ) % 3 )      
 3 * (                      0 ) - (                   0 ) =  0
 3 * ( ( 1 +  2 * 2 ) % 3 > 0 ) - ( (  1 +  2 * 2 ) % 3 )        1   2
 3 * ( (          5 ) % 3 > 0 ) - ( (           5 ) % 3 )      
 3 * (                      1 ) - (                   2 ) =  1
 --------------------------------------------------------
 3 * ( ( 2 +  0 * 2 ) % 3 > 0 ) - ( (  2 +  0 * 2 ) % 3 )        2   0
 3 * ( (          2 ) % 3 > 0 ) - ( (           2 ) % 3 )      
 3 * (                      1 ) - (                   2 ) =  1
 3 * ( ( 2 +  1 * 2 ) % 3 > 0 ) - ( (  2 +  1 * 2 ) % 3 )        2   1
 3 * ( (          4 ) % 3 > 0 ) - ( (           4 ) % 3 )      
 3 * (                      1 ) - (                   1 ) =  2
 3 * ( ( 2 +  2 * 2 ) % 3 > 0 ) - ( (  2 +  2 * 2 ) % 3 )        2   2
 3 * ( (          6 ) % 3 > 0 ) - ( (           6 ) % 3 )      
 3 * (                      0 ) - (                   0 ) =  0
 --------------------------------------------------------
 3 * ( ( 3 +  0 * 2 ) % 3 > 0 ) - ( (  3 +  0 * 2 ) % 3 )        3   0
 3 * ( (          3 ) % 3 > 0 ) - ( (           3 ) % 3 )      
 3 * (                      0 ) - (                   0 ) =  0
 3 * ( ( 3 +  1 * 2 ) % 3 > 0 ) - ( (  3 +  1 * 2 ) % 3 )        3   1
 3 * ( (          5 ) % 3 > 0 ) - ( (           5 ) % 3 )      
 3 * (                      1 ) - (                   2 ) =  1
 3 * ( ( 3 +  2 * 2 ) % 3 > 0 ) - ( (  3 +  2 * 2 ) % 3 )        3   2
 3 * ( (          7 ) % 3 > 0 ) - ( (           7 ) % 3 )      
 3 * (                      1 ) - (                   1 ) =  2
 --------------------------------------------------------
 (...)