1

我希望下面的代码为从我的 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 变量31/01/1991 , Ross和$vrble115/03/1989 。$vrble2$vrble3$vrble4

我怎样才能做到这一点?

4

5 回答 5

1

我不知道你为什么要这样做,但我认为你可以这样做(如果我没有弄错的话):

for ($c=0; $c < $num; $c++) {
  $vname = 'vrble' . ($c+1);
  $$vname = $data[$c];
}

这样,您就可以在 $vrble1、$vrble2 等变量中获得值。

让我知道这是否回答了您的问题。

于 2012-12-18T11:41:58.523 回答
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_combineextract

但是,如果您问我,您应该继续使用数组。

于 2012-12-18T11:45:09.947 回答
0

只是一个小编辑

for ($c=0; $c < $num; $c++) 
{
    $vname = 'vrble' . ($c+1);
    $$vname = $data[$c][1];
}
于 2012-12-18T11:46:40.197 回答
0

在进入 while 循环之前创建一个迭代器变量:

$i = 0;

...然后在 while 循环中,执行以下操作:

list(${'vrble'.++$i}, ${'vrble'.++$i}) = $data;

(假设您总是每行有 2 列。有关详细信息,请参阅list() 上的手册

于 2012-12-18T11:47:12.990 回答
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);
}
?>
于 2012-12-18T11:50:35.557 回答