php strcmp с данными файла
Я хочу прочитать CSV-файл, экспортированный из Excel и сохранить его в таблице MySQL. Столбцы - это обычные строки, целые числа или даты. Поскольку даты в файле csv рассматриваются как строки, но я хочу, чтобы они хранились с типом MySQL DATE, у меня есть параллельные массивы имен полей таблицы и типов дат. У меня есть внешний цикл по строкам и внутренний цикл по столбцам. Во внутреннем цикле я сравниваю тип данных столбца с "DATE", поэтому я могу использовать функцию форматирования даты PHP, чтобы преобразовать строку "21.01.2014" в формат MySQL DateTime.
Проблема: strcasecmp($colTypes[$iCol],"DATE") == 0 никогда не оценивается как TRUE, даже если $ colTypes [$ iCol] повторяет "DATE". Я считаю, что это связано с тем, как php хранит строку "DATE" против способа, которым она хранится в файле для чтения.
Вот код:
while (($data = fgetcsv($handle, 1000, ',', '"')) !== FALSE)
{
$num = count($data);
echo "There are : " . $num . " fields in line " . $row . "<br />";
if ($row > 0) { // Skip header row
// Build a CSV list of column values
$values = '';
for ($iCol=0; $iCol < $num; $iCol++) {
if ($iCol == 0) {$sep = '\'';} // this avoid leading comma
else {$sep = ', \'';}
$Type = $colTypes[$iCol];
if (strcasecmp($Type,"DATE") == 0){
//...
//...
}
Есть идеи?
Заранее спасибо.
издание
2 ответа
Вы могли бы просто сделать:
$Type = trim(strtolower($colTypes[$iCol]));
if ($Type == "date"){
....
}
и попробуйте сделать это и посмотрите, что вы получите:
echo strcasecmp($Type,"DATE");
чтобы увидеть, если вы получите 0
или нет
После того, как вы получите дату из базы данных, просто используйте эту функцию:
$date1 = new DateTime($date_from_db);
$date2 = $date1->format('d-m-y');
if (strcasecmp($Type,$date2) == 0){...}
Я проверил это, и это сработало для меня.