str_getcsv示例

时间:2011-05-29 17:28:50

标签: php csv

我想将逗号分隔值字符串解析为数组。我想尝试str_getcsv() php函数,但我找不到任何关于如何使用它的好例子。

例如,我有一个输入,用户为编程语言(php,js,jquery等)提交标签,比如提交问题时stackoverflow中的“标签”输入。

如何使用str_getcsv将示例value="php, js, jquery"的输入转换为数组?

5 个答案:

答案 0 :(得分:7)

http://us3.php.net/manual/en/function.str-getcsv.php的规范确实不包含标准示例,但用户提交的注释在覆盖它方面做得不错。如果这是表单输入:

$val = $_POST['value'];
$data = str_getcsv($val);

$data现在是一个包含值的数组。试一试,看看你是否还有其他问题。

答案 1 :(得分:7)

我认为您应该查看explode来完成此任务。

 $values  = "php, js, jquery";
 $items = explode(",", $values);

 // Would give you an array:
 echo $items[0];  // would be php
 echo $items[1];  // would be js
 echo $items[2];  // would be jquery

这可能比str_getcsv();

更有效

请注意,您需要使用trim()在项目值之前和之后删除可能的空格。

<强>更新

之前我没有见过str_getcsv,但是在联机帮助页上阅读这句话会让它看起来像一个有价值的候选人:

  

为什么不使用explode()而不是str_getcsv()来解析行?   因为explode()不会处理可能的封闭部分   字符串或转义字符正确。

答案 2 :(得分:3)

为了简单和可读性,我通常发现自己只使用explode(),只有在满足以下两个条件时才添加str_getcsv():1)主分隔符也在数据本身中使用; 2)我试图用作主分隔符的令牌被另一个不同的字符包围。

例如,CSV文件的基本解析器:

$filename = $argv[1];
if (empty($filename)) { echo "Input file required\n"; exit; }
$AccountsArray = explode("\n", file_get_contents($filename));

只要$ AccountsArray的每个元素都没有在数据本身中嵌入“,”,这将完美地运行并且简单易懂:

foreach ($AccountsArray as $entry) {
    $acctArr = explode(",", $entry);
}

但是,通常数据将包含分隔符,此时必须存在一个封闭的标记(在本例中为“)”。如果是,那么我切换到str_getcsv(),如下所示:

foreach ($AccountsArray as $entry) {
    $acctArr = str_getcsv($entry, ",", "\""); 
}

答案 3 :(得分:0)

//get the csv
$csvFile = file_get_contents('test.csv');
//separate each line
$csv = explode("\n",$csvFile);

foreach ($csv as $csvLine) {

    //separet each fields
    $linkToInsert = explode(",",$csvLine);
    //echo what you need
    //$linkToInsert[0] would be the first field, $linkToInsert[1] second field, etc
    echo '• ' . $linkToInsert[1] . '<br>';
}

答案 4 :(得分:0)

代码很简单,使用Str_getcsv函数,我们会去 通过位于文件中的CSV文件“images.csv”的每一行 与我们的脚本相同的目录。

注意:使用的函数与PHP&gt; = 5.3.0

的版本兼容
//First, reading the CSV file

$csvFile = file('file.csv');

foreach ($csvFile as $line) {
    $url = str_getcsv($line);

    $ch = curl_init($url[0]);

    $name = basename($url[0]);

    if (!file_exists('directory/' . $name)) {
        $fp = fopen('directory/' . $name, 'wb');
    }

    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp);         
}