在 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>';
我有一些正在处理的数据,并且我已经到了要合并一些数组的阶段。 我的问题是我需要的数组数量是动态的,虽然我得到了我的代码来处理一定数量的数据,但我对所有这些计数器有点困惑,而且我有重复的代码。 我想我需要以某种方式动态生成这些数组,但我不确定如何生成。 这是我的代码,当我有 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>';