比较数组中的先前值和当前值

时间:2013-11-20 05:36:43

标签: php arrays csv

我正在尝试使用其他数据从现有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天?请帮忙。

另外,我知道如何处理数组可能有问题,所以如果有人知道如何更好,更快,更有效地处理这些数据,我将不胜感激。

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内容。