PHP从csv文件中删除所有换行符和空格


PHP remove all newlines and spaces from a csv

我正在尝试使用这个很棒的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;
}

我希望有人能帮忙!提前感谢您看一下

您需要检查$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;
}

试试这个。它会跳过空行并裁剪值。

// 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; 
} 
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;
}