我正在尝试使用这个令人敬畏的Jist将CSV转换为JSON:https://gist.github.com/robflaherty/1185299
我从一个非常过时的过程编程语言中获得了一个非常多的CSV。 CSV只能按如下方式生成。
我需要删除第二行,这是一个空行换行符,理想情况下,我想删除每行的所有额外空格:
Series, SKU, Stock
01000 , 01000-1116 , 98
01000 , 01000-1132 , 0
01000 , 01000-116 , 1000
01000 , 01000-1164 , 3880
01000 , 01000-12 , 2040
01000 , 01000-132 , 2240
01000 , 01000-1332 , 545
01000 , 01000-1364 , 50
我已经尝试过我的小武器库中的所有组合来实现这一目标。 preg_replace,trim等。
有人有任何建议吗?以下是处理行的Jist部分:
function csvToArray($file, $delimiter) {
if (($handle = fopen($file, 'r')) !== FALSE) {
$i = 0;
while (($lineArray = fgetcsv($handle, 4000, $delimiter, '"')) !== FALSE) {
for ($j = 0; $j < count($lineArray); $j++) {
$arr[$i][$j] = $lineArray[$j];
}
$i++;
}
fclose($handle);
}
return $arr;
}
我希望有人可以提供帮助!提前谢谢你看看。
答案 0 :(得分:2)
您需要检查$lineArray
并使用trim()
功能,如下面的代码所示:
function csvToArray($file, $delimiter) {
if (($handle = fopen($file, 'r')) !== FALSE) {
$i = 0;
while (($lineArray = fgetcsv($handle, 4000, $delimiter, '"')) !== FALSE) {
if (count($lineArray) == 1 && is_null($lineArray[0])) {
continue;
}
for ($j = 0; $j < count($lineArray); $j++) {
$arr[$i][$j] = trim($lineArray[$j]);
}
$i++;
}
fclose($handle);
}
return $arr;
}
答案 1 :(得分:2)
Try this code:
function csvToArray($file, $delimiter)
{
if (($handle = fopen($file, 'r')) !== FALSE) {
$i = 0;
while (($lineArray = fgetcsv($handle, 4000, $delimiter, '"')) !== FALSE) {
for ($j = 0; $j < count($lineArray); $j++) {
if ($lineArray[$j] !== '') {
$arr[$i][$j] = $lineArray[$j];
}
}
$i++;
}
fclose($handle);
}
return $arr;
}
答案 2 :(得分:1)
试试这个。它会跳过空行并修剪值。
// Function to convert CSV into associative array
function csvToArray($file, $delimiter) {
if (($handle = fopen($file, 'r')) !== FALSE) {
$i = 0;
while (($lineArray = fgetcsv($handle, 4000, $delimiter, '"')) !== FALSE) {
if(count($lineArray)==1) continue; //skip empty line (will fail if file will have only one column)
for ($j = 0; $j < count($lineArray); $j++) {
$arr[$i][$j] = trim($lineArray[$j]); //trim value
}
$i++;
}
fclose($handle);
}
return $arr;
}