【问题标题】:How to separate and modify the content of a string in php?如何在php中分离和修改字符串的内容?
【发布时间】:2020-07-07 20:28:23
【问题描述】:

我读了一个这样的 csv 文件:

  391;WETSUITS;07/07/2020 12:47:36;0021000001463;
  392;WETSUITS;07/07/2020 12:47:49;0021000007845;
             ....

我用这种格式检索一个日期:

echo $data[2] = 07/07/2020 12:47:36

我想要两个变量:

$date = 07-07-2020 or 2020-07-07
$time = 1247

我在第一部分尝试使用 str_replace,但收到“通知:未定义偏移量:2”作为错误消息,我该如何更改?

 <?php

$csv = 'C:/wamp64/www/BI/BI1_20200707_1520_28044.csv';


if (($handle = fopen("$csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 9000000, ";")) !== FALSE){

            // echo $data[2]; //07/07/2020 12:47:36

        $new = str_replace('/', '_', $data[2]);
        echo $date = substr($new,0,20)."\n";;
 
    }
}

?>

【问题讨论】:

  • 不清楚您收到通知的哪一行。如果echo $data[2] 显示正确的数据,那么str_replace 也应该可以工作。
  • 你之前问过这个问题,它作为this question的副本被关闭了。您的标题表明这仍然是一个骗局,但您提到的错误完全不同。您实际上想解决哪个问题?
  • 我在“$new = str_replace('/', '_', $data[2]);”行有一个错误@u_mulder

标签: php date time


【解决方案1】:

这个通知可能是因为文件末尾有一个空行。 因此,只需检查 $data 数组是否为空。

while (($data = fgetcsv($handle, 9000000, ";")) !== false) {
        // empty line will be transformed to [null]
        if (empty(array_filter($data))) {
            continue;
        }

    // other operations
}

建议:最好使用 DateTime 进行日期操作。日期格式参考:https://www.php.net/manual/en/function.date

$date = \DateTime::createFromFormat('d/m/Y H:i:s', $data[2]);
if ($date === false) {
    // handle date parse error
}

$date1 = $date->format('Y-m-d'); // 2020-07-07
$date2 = $date->format('Hi'); // 1247

【讨论】:

  • 这并没有解决他们问题中的错误消息
  • 第一行是
  • 我尝试了您的代码,但出现了运行时错误:“致命错误:未捕获的错误:在布尔值上调用成员函数 format()”@DmitrySolovov
  • 您必须对日期解析错误进行处理(在带有注释 // handle date parse error 的 if 块中)。放置continuebreak,可能会记录错误。
  • 如果我在 if 中放置中断或继续,而不是“// 处理日期解析错误”,我不会显示任何内容 @Dmitry Solovov
猜你喜欢
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多