我有一个大约30或40行的文件。该文件看起来与此类似:
1234567899,05/30/13,1430,10,ANDERSON MONTE
4567891234,06/01/13,930,10,ANDERSON JENNIFER
7891234567,06/02/13,1515,10,ANDERSON MONTE
现在,我需要在管道的时间周围更改逗号。我还需要将它从24小时改为12小时,其后面是AM或PM。我正在从一个文件而不是从数据库中读取所有这些。所以我需要它最终看起来像这样:
1234567899,05/30/13|02:30PM|10,ANDERSON MONTE
4567891234,06/01/13|09:30AM|10,ANDERSON JENNIFER
7891234567,06/02/13|03:15PM|10,ANDERSON MONTE
任何帮助将不胜感激。我想尽可能使用PHP。它起初是一份报告,我已经能够解决上述问题了。
提前谢谢你 蒙
答案 0 :(得分:0)
你可以尝试
$files = file("log.txt");
$list = array();
foreach ( $files as $data ) {
$data = explode(",", $data);
$time = sprintf("%s|%s|%s",
$data[1],
DateTime::createFromFormat("Gi", str_pad($data[2], 4, "0", STR_PAD_LEFT))->format("h:iA"),
$data[3]);
$list[] = implode(",", array($data[0],$time,$data[4]));
}
echo "<pre>";
print_r($list);
输出
Array
(
[0] => 1234567899,05/30/13|02:30PM|10,ANDERSON MONTE
[1] => 4567891234,06/01/13|09:30AM|10,ANDERSON JENNIFER
[2] => 7891234567,06/02/13|03:15PM|10,ANDERSON MONTE
)
答案 1 :(得分:0)
好吧,如果日期和时间总是排在第二和第三位,那么肯定会有一个解决方案是使用array_splice
,array_slice
和join
/implode
:
array_splice($arr, 1, 3, join('|', array_slice($arr, 1, 3));
这是完整的代码(但是帮助你可以解决问题,而不是解决问题)存在stackoverflow:
$in = fopen('input.txt', 'r');
$out = fopen('output.txt', 'w');
while(($line = fgetcsv($in)) !== FALSE) {
# you're probably better off using methods of the DateTime class:
$hours = substr($line[2], 0, -2);
$line[2] = (($hours+12-1)%12+1) . substr($line[2], -2) . (($hours<12)?'AM':'PM');
array_splice($line, 1, 3, join('|', array_slice($line, 1, 3));
$fputcsv($out, $line);
}