iT邦幫忙

0

php for 迴圈 如何可以判斷上一個值?

php for 迴圈 如何可以判斷上一個值?

目前是用 php 去讀取 excel

然後資料透過 for 迴圈顯示

但是遇到一個問題~ 假如同一天有多筆資料的話 ~ 第二筆以後的資料我的日期需要變成自定義

那麼我該如何抓到上一個資料?

code 是這樣的

include_once("PHPExcel/IOFactory.php");
include_once("PHPExcel.php");
require_once 'PHPExcel/Reader/Excel5.php';
$objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
$filename="Briefing.xls";
$objPHPExcel = $objReader->load($filename); 
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn(); 
$ww = 0;

for ($j=2;$j<$highestRow;$j++) {

$a = $objPHPExcel->getActiveSheet()->getCell("A".$j)->getValue();
$b = $objPHPExcel->getActiveSheet()->getCell("B".$j)->getValue();
$c = $objPHPExcel->getActiveSheet()->getCell("C".$j)->getValue();
$d = $objPHPExcel->getActiveSheet()->getCell("D".$j)->getValue();
$e = $objPHPExcel->getActiveSheet()->getCell("E".$j)->getValue();

echo "INSERT INTO Tabel_A (SDate,EDate,info,type,mark) VALUES ('".$a."','".$b."','".$c."','".$d."','".$e."');  //一天只能一筆

echo "INSERT INTO Tabel_B (B_SDate,B_EDate,B_info,B_type,B_mark) VALUES ('".$a."','".$b."','".$c."','".$d."','".$e."'); // 多筆資料

}


Excel 資料是這樣
 A           B            C                 D       E

2021-10-10 2021-10-11 110年8月10日日報 Car new
2021-10-11 2021-10-20 110年8月11日日報 Bik new
2021-10-11 2021-10-20 110年8月11日日報 Car old
2021-10-11 2021-10-20 110年8月11日日報 Bik old
2021-10-11 2021-10-25 110年8月11日日報 Car old
2021-10-16 2021-10-25 110年8月16日日報 mot new
2021-10-17 2021-10-27 110年8月17日日報 Car new
2021-10-19 2021-10-27 110年8月19日日報 mot old
2021-10-20 2021-10-30 110年8月20日日報 Car new
2021-10-20 2021-10-30 110年8月20日日報 mot old


因為 Table_A 是主表 所以一天只會有一筆資料
然後 Table_B 是追蹤關聯表 所以當一天有多筆資料的話 會把資料也新增到這裡

主要是由 C 欄位判斷 

假如 110年8月11日日報 有四筆資料 但是我在 INSERT INTO Tabel_A 的時候 只要新增一筆

那我要怎麼做?
Hankz iT邦新手 3 級 ‧ 2021-10-13 15:58:24 檢舉
> 假如 110年8月11日日報 有四筆資料 但是我在 INSERT INTO Tabel_A 的時候 只要新增一筆

這裡是是指 第一筆到Tabel_A,第二筆之後到Table_B嗎?

2 個回答

0
犬千賀
iT邦新手 4 級 ‧ 2021-10-13 20:23:58

直接判斷 Date c 是否存在就好了!

$__arr = array();

for ($j=2;$j<$highestRow;$j++) {
    $a = ...(ry(ry
    $c = $objPHPExcel->getAct...(ry
    
    if(!$__arr[ $c ] ){
        // if 'Date c' not exists, INSERT Table_A
    }
    
    INSERT Table_B // insert all data
    $__arr[ $c ] = 1;
}
0
sky940811
iT邦新手 3 級 ‧ 2021-10-14 10:23:18

是我的話應該會用Session來判斷吧
將資料存到Session去跟下一筆比對
不相等代表是第一次出現,就新增Table_A;相等代表這天有2筆以上,就新增Table_B

$chk_c = $_SESSION['c'];  //儲存C資料
for ($j=2;$j<$highestRow;$j++) {
   $a = $objPHPExcel->getActiveSheet()->getCell("A".$j)->getValue();
   $b = $objPHPExcel->getActiveSheet()->getCell("B".$j)->getValue();
   $c = $objPHPExcel->getActiveSheet()->getCell("C".$j)->getValue();
   $d = $objPHPExcel->getActiveSheet()->getCell("D".$j)->getValue();
   $e = $objPHPExcel->getActiveSheet()->getCell("E".$j)->getValue();
   if($c!=$chk_c){ //判斷目前資料是否和上一筆不同
      insert into Table_A
      $chk_c = $c;  //若不同,則將資料存到Session,再與下一筆資料比對
   } else {
      insert into Table_B
      //C資料相同的話就不需要更新Session資料
   }
}

我要發表回答

立即登入回答