PHP:使用preg_match_all将csv拆分为可用的数组

时间:2013-11-26 17:10:45

标签: php csv preg-match-all

我正在尝试在php中使用preg_match_all来提取csv字符串的各个部分。

这是我正在尝试的代码:

$csv = "1,2,3,4";
$match = "/^(\d+)(?:,(\d+))*$/";

$matches = array();

preg_match_all($match, $csv, $matches);

print_r($matches);

我期待的是:

Array
(
    [0] => Array
        (
            [0] => 1,2,3,4
        )
    [1] => Array
        (
            [0] => 1
        )
    [2] => Array
        (
            [0] => 2
        )
    [3] => Array
        (
            [0] => 3
        )
    [4] => Array
        (
            [0] => 4
        )
)

我得到的是:

Array
(
    [0] => Array
        (
            [0] => 1,2,3,4
        )
    [1] => Array
        (
            [0] => 1
        )
    [2] => Array
        (
            [0] => 4
        )
)

我只能修改'^'和'$'之间的内容,因为这只是完整字符串的一部分。

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

function csvToArray( $csvxrow , $delm = ';' , $encl ='"' , $head = true )
{ 
    $csvxrow[0] = chop( $csvxrow[0] ); 
    $csvxrow[0] = str_replace( $encl, '' ,$csvxrow[0] ); 
    $keydata = explode( $delm, $csvxrow[0] ); 
    $keynumb = count( $keydata ); 

    if ( $head === true )
    { 
    $anzdata = count( $csvxrow ); 
    $z = 0; 
    for( $x = 1; $x < $anzdata; $x++ )
    { 
        $csvxrow[$x] = chop( $csvxrow[$x] ); 
        $csvxrow[$x] = str_replace( $encl, '', $csvxrow[$x] ); 
        $csv_data[$x] = explode( $delm, $csvxrow[$x] ); 
        $i = 0; 
        foreach( $keydata as $key )
        { 
            $out[$z][$key] = $csv_data[$x][$i]; 
            $i++;
        }    
        $z++;
        }
    }
    else
    { 
        $i = 0;
        foreach( $csvxrow as $item )
        { 
            $item = chop( $item ); 
            $item = str_replace( $encl, '', $item ); 
            $csv_data = explode( $delm, $item ); 
            for( $y = 0; $y < $keynumb; $y++ )
            { 
               $out[$i][$y] = $csv_data[$y]; 
            }
        $i++;
        }
    }

    return $out; 
}

这就是我使用的。 PHP具有特定的功能,但它们不是很好。

如果CSV中没有列标题,请将头设置为false。