我一直在努力解决这个PHP问题。我有一个带有客户信息的csv文件,看起来像这样。
clientName, clientNumber, clientStatus
Name1,123456,1
Name2,123457,0
现在,问题如下。有时csv也有出生日期......如下:
clientName, clientNumber, clientDOB, clientStatus
Name1,123456,01/10/1980,1
Name2,123457,1980-10-01,0
您可以看到日期格式不同。在将csv转换为数组时,我需要检查csv中是否有clientDOB,如果是,则将其格式化为mysql。
function dateToMysql($date) {
$mysqlDate = date("Y-m-d",strtotime(str_replace('/','-',$date)));
return $mysqlDate;
}
function csvToArray($filename='', $delimiter=',') {
if(!file_exists($filename) || !is_readable($filename)) {
return FALSE;
}
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 10000, $delimiter)) !== FALSE) {
if(!$header) {
$header = $row;
} else {
if (in_array("clientDOB", $header)) {
//echo dateToMysql($header['clientDOB'][$row])."<br>";
$data[] = dateToMysql(array_combine($header, $row));
} else {
$data[] = array_combine($header, $row);
}
}
}
fclose($handle);
}
return $data;
}
echo "<pre>";
print_r(csvToArray($_FILES['csvFile']['name']));
echo "</pre>";
任何帮助将不胜感激。谢谢
答案 0 :(得分:1)
这是一个更新的功能:
function csvToArray($filename='', $delimiter=',') {
if(!file_exists($filename) || !is_readable($filename)) {
return FALSE;
}
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 10000, $delimiter)) !== FALSE) {
$row = array_map('trim', $row);
if (!$header)
$header = $row;
else
{
$row = array_combine($header, $row);
if ( isset( $row[ 'clientDOB' ] ) )
$row[ 'clientDOB' ] = date('Y-m-d', strtotime( $row[ 'clientDOB' ] ) );
$data[] = $row;
}
}
fclose($handle);
}
return $data;
}
值得注意的变化:
$row = array_map('trim', $row)
确保名称和值周围没有周围空格,否则['clientDOB']
将不匹配(因为它是[' clientDOB']
。
在将$row['clientDOB']
追加到$row
之前更改$data
的值。您的dateToMysql
函数需要$date
,而是传递了一个关联数组。
使用strtotime
无需替换:它可以处理两种日期格式。