我希望以下代码为从CSV文件中读取的每个值分配一个变量。
<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>
例如,在CSV文件中,我有2个Excel列中的4个值:
Jack,31/01/1991
Ross,15/03/1989
我希望make Jack变量$vrble1
,31/01/1991 $vrble2
,Ross $vrble3
和15/03/1989 $vrble4
。
我该怎么做?
答案 0 :(得分:1)
我不知道你为什么要这样做,但我认为你可以这样做(如果我没有弄错的话):
for ($c=0; $c < $num; $c++) {
$vname = 'vrble' . ($c+1);
$$vname = $data[$c];
}
有了这个,你就可以使用$ vrble1,$ vrble2等变量中的值。
如果这回答了您的问题,请告诉我。
答案 1 :(得分:0)
每次迭代都会将数据合并到一个数组中:
$file = new SplFileObject("test.csv");
$file->setFlags(SplFileObject::READ_CSV);
$data = call_user_func_array('array_merge', iterator_to_array($file));
然后您可以将数组数据提取到本地变量中,如下所示:
$data = array_combine(range(1, count($data)), $data);
extract($data, EXTR_PREFIX_ALL, 'vrble');
请参阅array_combine
和extract
。
但是,如果你问我,你应该继续使用数组。
答案 2 :(得分:0)
只是一个小编辑
for ($c=0; $c < $num; $c++)
{
$vname = 'vrble' . ($c+1);
$$vname = $data[$c][1];
}
答案 3 :(得分:0)
在进入while循环之前创建一个迭代器变量:
$i = 0;
...然后在while循环中,执行以下操作:
list(${'vrble'.++$i}, ${'vrble'.++$i}) = $data;
(假设每行总共有2列。有关详细信息,请参阅manual on list()。
答案 4 :(得分:0)
<?php
$row = 1;
$arr = array();
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
$arr[$c] = $data[$c];
}
}
fclose($handle);
}
?>