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

时间:2014-07-24 08:18:26

标签: php json csv newline whitespace

我正在尝试使用这个令人敬畏的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;
}

我希望有人可以提供帮助!提前谢谢你看看。

3 个答案:

答案 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; 
}