Я немного новичок в PHP. Я пытаюсь импортировать данные из таблицы Excel с помощью PhpSpreadsheet. Он отлично работает в соответствии с моими требованиями, используя приведенный ниже код.

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load("uploads/temp.xlsx");
$worksheet = $spreadsheet->getActiveSheet();
$spreadSheetAry = $worksheet->toArray();
$sheetCount = count($spreadSheetAry);
//echo $sheetCount;

$sql = "INSERT INTO tbl_tour (user_email,date,day,school_name,visit_status,reason) VALUES (?,?,?,?,?,?)";
$stmt=$mysqli->prepare($sql);

for ($i = 1; $i <= $sheetCount; $i ++) {
        $date ="";
        $day ="";
        $school_name ="";
        $visit_status = "";
        $reason = "";
        if (isset($spreadSheetAry[$i][1])) {
            $date = $spreadSheetAry[$i][1];
        }
        if (isset($spreadSheetAry[$i][2])) {
            $day = $spreadSheetAry[$i][2];
        }
        if (isset($spreadSheetAry[$i][3])) {
            $school_name = $spreadSheetAry[$i][3];
        }
        if (isset($spreadSheetAry[$i][4])) {
            $visit_status = $spreadSheetAry[$i][4];
        }
        if (isset($spreadSheetAry[$i][5])) {
            $reason = $spreadSheetAry[$i][5];
        }

           $stmt->bind_param('ssssss',$email,$date,$day,$school_name,$visit_status,$reason);
           $stmt->execute();
           
           
           
}
$stmt->close();

У меня есть столбцы типа SR, ДАТА, ДЕНЬ, НАЗВАНИЕ ШКОЛЫ, СТАТУС ПОСЕЩЕНИЯ, ПРИЧИНА в моем листе Excel.

ДАТА СОДЕРЖИТ ДАТУ МЕСЯЦА с 1 по 31. Теперь проблема заключается в отсутствии строки ВОСКРЕСЕНЬЕ. Я ищу добавить строку даже для отсутствующих дат с моими пользовательскими данными для этой даты, но я не понимаю, как я могу это сделать. КОЛОНКА МОЯ ТЕКУЩАЯ ДАТА содержит подобные данные

01-09-2021
01-09-2021
02-09-2021
02-09-2021
03-09-2021
03-09-2021
04-09-2021
04-09-2021
06-09-2021
06-09-2021
07-09-2021
07-09-2021
08-09-2021
08-09-2021
09-09-2021
09-09-2021
11-09-2021
11-09-2021
13-09-2021
13-09-2021
14-09-2021
14-09-2021
15-09-2021
15-09-2021
16-09-2021
16-09-2021
17-09-2021
17-09-2021
18-09-2021
18-09-2021
20-09-2021
20-09-2021
21-09-2021
21-09-2021
22-09-2021
22-09-2021
23-09-2021
23-09-2021
24-09-2021
24-09-2021
25-09-2021
25-09-2021
27-09-2021
27-09-2021
28-09-2021
28-09-2021
29-09-2021
29-09-2021
30-09-2021
30-09-2021

Дайте мне знать, если кто-нибудь сможет помочь мне решить загадку. Спасибо!

0
Nidhi 18 Сен 2021 в 06:56

2 ответа

Лучший ответ

Я предлагаю вам пройти итерацию между первым и последним днем.

$startTime = strtotime($spreadSheetAry[1][1] );
$endTime = strtotime( $spreadSheetAry[$sheetCount][1] );
$j = 1;
// Loop between timestamps, 24 hours at a time
for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) {
  $thisDate = date( 'Y-m-d', $i ); // 2010-05-01, 2010-05-02, etc
  if($spreadSheetAry[$j][1]===$thisDate){
    // Date exists, do something.
    $j++;
  }else{
    // Date does not exist, do something else.
  }
}
1
4EACH 18 Сен 2021 в 04:21

Не уверен, правильно ли я понимаю вашу проблему. Может это поможет:

if (isset($spreadSheetAry[$i][1])) {
  $date = $spreadSheetAry[$i][1];
  if (DateTime::createFromFormat('d-m-Y', $date) === false) {
    $date = ... // do your magic here :)
  }
}

Удачи!

0
romek 18 Сен 2021 в 04:16