我想将逗号分隔的字符串解析成数组。我想尝试使用 str_getcsv()
php 函数,但我找不到任何好的示例来说明如何使用它。
例如,我有一个输入框,用户可以在其中提交编程语言的标签(php、js、jquery 等),就像在 stackoverflow 提交问题时的“tags”输入框一样。
如何使用 str_getcsv 将类似 value="php, js, jquery"
的输入转换为数组呢?
确实,http://us3.php.net/manual/zh/function.str-getcsv.php 上的规范并没有包含一个标准的示例,但用户提交的注释已经很好地涵盖了它。如果这是一个表单输入:
$val = $_POST['value'];
$data = str_getcsv($val);
$data
现在是一个包含值的数组。尝试使用它并查看是否还有其他问题。
$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
为了简单和易读性,我通常只使用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));
foreach ($AccountsArray as $entry) {
$acctArr = explode(",", $entry);
}
然而,数据通常会包含分隔符,此时必须存在一个封闭标记(例如本例中的“"”)。如果是这样,那么我会使用以下代码切换到str_getcsv():
foreach ($AccountsArray as $entry) {
$acctArr = str_getcsv($entry, ",", "\"");
}
代码非常简单,使用Str_getcsv
函数,我们将遍历CSV文件“images.csv”的每一行,该文件位于与我们的脚本相同的目录中。
注意:所使用的函数兼容PHP版本>= 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);
}
//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>';
}
$myArray = str_getcsv($value);
应该可以吧? - Jürgen Thelen