我正在尝试使用其他数据从现有CSV文件创建新的CSV文件。我使用fgetcsv访问现有CSV文件中的数据并将其放入数组中。将csv文件内容放入数组后,该数组变成了一个二维数组,其数据如下所示:
Array {
[0] =>
Array {
[0] => "Data1", "Data2", Data3
}
}
所以我所做的是先创建一个新的数组,然后首先爆炸数组值,然后像这样爆炸:
for($i = 0; $i < $myArray; $i++) {
$tempString = implode(" ", $myArray);
$tempArray = explode (" ", $tempString);
}
有了这个我的阵列现在看起来像这样:
Array {
[0] => "Data1"
[1] => "Data2"
[3] => "Data3" //endDate
}
Array {
[0] => "Data1"
[1] => "Data2"
[3] => "Data3" //endDate
}
现在,我想在startDate的数组上添加第四个值。我希望startDate等于endDate + 1.例如,endDate是11月20日,那么下一个Array的endDate是11月21日。问题是我不完全确定如何实现它。我已经尝试在for循环中添加这个,就像我读过的所有示例和文章一样:
$d3 = $tempArray[3]; //Data3
if($d3 == $previous) {
//do some things here
}
$previous = $d3 + 1;
与此相关的是日期往往是分组。例如,阵列1-8是11月20日,然后阵列9-20是11月30日。因此,只有这些“组”中的第一个日期才能获得之前的值,因此只有阵列9才能获得11月21日。如何告诉我的代码,虽然结束日期相同,但它不会更改开始日期?如果确实如此,它应该获得前一个日期并添加1天?请帮忙。
另外,我知道如何处理数组可能有问题,所以如果有人知道如何更好,更快,更有效地处理这些数据,我将不胜感激。
答案 0 :(得分:1)
$resultant_array = array(
array(
'0' => 'hello',
'1' => 'world',
'2' => '20-11-2009'
),
array(
'0' => 'hi',
'1' => 'check',
'2' => '20-11-2009'
),
array(
'0' => 'hi',
'1' => 'newcheck',
'2' => '30-11-2009'
),
array(
'0' => 'hell0',
'1' => 'newcheck',
'2' => '30-11-2009'
)
);
foreach($resultant_array as $rk => &$rv) {
if($rk == 0) {
$end_date = $rv[2];
}
if($rv[2] == $end_date) {
continue; // ignore as its neigther the first group
} else {
if($rk) $rv[] = date('d-m-Y', strtotime('+1 day',strtotime($rv[2])));
$end_date = $rv[2];
}
}
这只是一个示例迭代,您还应该考虑以更好的方式解析csv内容。