在php中合并动态数组


Merge dynamic arrays in php

我有一些数据正在处理,并且我已经到了合并一些数组的阶段。我的问题是,我需要的数组数量是动态的,尽管我的代码是为一定数量的数据做工作的,但我对所有这些计数器都有点困惑,而且我有重复的代码。我想我需要以某种方式动态地生成这些数组,但我不确定如何生成。以下是我的代码,当我有3个数组(循环)时,它非常完美:

$dataonlyarray = array();
$dataonlyarray2 = array();
$dataonlyarray3 = array();
$dataonlyarray4 = array();
        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            $dataonlyarray2[] = array_slice($main_prod_arr[$i],0,$startingdatecolumn);
            $dataonlyarray3[] = array_slice($main_prod_arr[$i],0,$startingdatecolumn);  
            $dataonlyarray4[] = array_slice($main_prod_arr[$i],0,$startingdatecolumn);      
            } 
        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            array_push($dataonlyarray2[$i],$main_prod_arr[$i][$startingdatecolumn]);    
            array_push($dataonlyarray2[$i],$main_prod_arr[$i][$startingdatecolumn]+1);  
            array_push($dataonlyarray2[$i],substr($headers_arr[$startingdatecolumn],0,10));         
            }   

        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            array_push($dataonlyarray3[$i],$main_prod_arr[$i][$startingdatecolumn]+2);
            array_push($dataonlyarray3[$i],$main_prod_arr[$i][$startingdatecolumn]+3);
            array_push($dataonlyarray3[$i],substr($headers_arr[$startingdatecolumn+3],0,10));       
            }   
        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            array_push($dataonlyarray4[$i],$main_prod_arr[$i][$startingdatecolumn]+4);
            array_push($dataonlyarray4[$i],$main_prod_arr[$i][$startingdatecolumn]+5);
            array_push($dataonlyarray4[$i],substr($headers_arr[$startingdatecolumn+5],0,10));       
            }           

            $dataonlyarrayall[] = array_merge($dataonlyarray2,$dataonlyarray3,$dataonlyarray4);

echo '<pre>'; print_r($dataonlyarrayall); 
echo '</pre>';

这是我的代码,如果我只有2个数组要循环(工作正常):

$dataonlyarray = array();
$dataonlyarray2 = array();
$dataonlyarray3 = array();
        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            $dataonlyarray2[] = array_slice($main_prod_arr[$i],0,$startingdatecolumn);
            $dataonlyarray3[] = array_slice($main_prod_arr[$i],0,$startingdatecolumn);      
            } 
        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            array_push($dataonlyarray2[$i],$main_prod_arr[$i][$startingdatecolumn]);    
            array_push($dataonlyarray2[$i],$main_prod_arr[$i][$startingdatecolumn]+1);  
            array_push($dataonlyarray2[$i],substr($headers_arr[$startingdatecolumn],0,10));         
            }   

        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            array_push($dataonlyarray3[$i],$main_prod_arr[$i][$startingdatecolumn]+2);
            array_push($dataonlyarray3[$i],$main_prod_arr[$i][$startingdatecolumn]+3);
            array_push($dataonlyarray3[$i],substr($headers_arr[$startingdatecolumn+3],0,10));       
            }   

            $dataonlyarrayall[] = array_merge($dataonlyarray2,$dataonlyarray3);
echo '<pre>'; print_r($dataonlyarrayall); 
echo '</pre>';

正如您将看到的,在每个新数组中都有一些值需要递增。。

以下是$main_prod_arr的示例(有2个产品和3个日期(需要3个循环):

Array
(
    [0] => Array
        (
            [0] => 2602721
            [1] => Product1
            [2] => 11 
            [3] => £12
            [4] => 13 
            [5] => £14
            [6] => 15 
            [7] => £16
        )
    [1] => Array
        (
            [0] => 2616122
            [1] => Product2
            [2] => 21 
            [3] => £22
            [4] => 23 
            [5] => £24
            [6] => 25 
            [7] => £26
        )
)

以下是$headers_arr的示例(包含2个产品和3个日期(需要3个循环):阵列

(
    [0] => ItemNbr
    [1] => ItemDesc
    [2] => 2016/01/01 Qty
    [3] => 2016/01/01 Sales
    [4] => 2016/01/02 Qty
    [5] => 2016/01/02 Sales
    [6] => 2016/01/03 Qty
    [7] => 2016/01/03 Sales
)

这是预计的输出(对于上述阵列):

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => 2602721
                            [1] => Product1
                            [2] => 11 
                            [3] => 12
                            [4] => 2016/01/01
                        )
                    [1] => Array
                        (
                            [0] => 2616122
                            [1] => Product2
                            [2] => 21 
                            [3] => 22
                            [4] => 2016/01/01
                        )
                    [2] => Array
                        (
                            [0] => 2602721
                            [1] => Product1
                            [2] => 13
                            [3] => 14
                            [4] => 2016/01/02
                        )
                    [3] => Array
                        (
                            [0] => 2616122
                            [1] => Product2
                            [2] => 23
                            [3] => 24
                            [4] => 2016/01/02
                        )
                    [4] => Array
                        (
                            [0] => 2602721
                            [1] => Product1
                            [2] => 15
                            [3] => 16
                            [4] => 2016/01/03
                        )
                    [5] => Array
                        (
                            [0] => 2616122
                            [1] => Product2
                            [2] => 25
                            [3] => 26
                            [4] => 2016/01/03
                        )
                )
        )
)

如有任何帮助,将不胜感激

我想我找到了解决方案。如果您有任何改进建议,请评论:)

$dataonlyarray = array();
$dataonlyarraylooped = array();
$dataonlyarrayall = array();
    for ($z = 0;  $z < sizeof($sec_headers_dates_arr)/2; $z++) {
        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            $dataonlyarraylooped[] = array_slice($main_prod_arr[$i],0,$startingdatecolumn); 
            } 
        for ($i = 0; $i < sizeof($main_prod_arr); $i++) {
            array_push($dataonlyarraylooped[$i],$main_prod_arr[$i][$startingdatecolumn+($z*2)]);    
            array_push($dataonlyarraylooped[$i],$main_prod_arr[$i][$startingdatecolumn+($z*2+1)]);  
            array_push($dataonlyarraylooped[$i],substr($headers_arr[$startingdatecolumn+($z*2+1)],0,10));           
            }   
            array_push($dataonlyarrayall,$dataonlyarraylooped); 
            unset($dataonlyarraylooped);
    }
echo '<pre>'; print_r($dataonlyarrayall); 
echo '</pre>';