以下是我用于从公共Google文档电子表格中提取数据的代码(导出为CSV格式)。
<?php
// link to Google Docs spreadsheet
$url='https://docs.google.com/spreadsheet/pub?key=xxxx&output=csv';
// open file for reading
if (($handle = fopen($url, "r")) !== FALSE)
{
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$totalrows = count($data);
for ($row=0; $row<=$totalrows; $row++)
{
if (strlen($data[$row])>0)
{
$firstname = $data[1];
$surname = $data[1];
echo $firstname;
echo $surname;
}
}
echo '<pre>';
print_r($data);
echo '</pre>';
}
fclose($handle);
}
exit;
?>
我得到的输出如下:
MartinMartin
Array
(
[0] => Firstname
[1] => Martin
)
CarlinCarlin
Array
(
[0] => Surname
[1] => Carlin
)
我只是对我的错误感到困惑,我希望能够将数据设置为变量,以便稍后在脚本中回显它们。
即。
<?php echo $firstname; ?>
应该回复Martin
,而不是MartinMartin
。
这是数据存储在电子表格中的方式:
A B
1 Firstname Martin
2 Surname Carlin
任何帮助表示赞赏!
更新
现在改变结构如下(对于长篇大论和重复感到遗憾):
// open file for reading
if (($handle = fopen($url, "r")) !== FALSE)
{
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
for ($row = 0; $row < count($data); $row += 2)
{
$firstname = $data[$row][1];
$surname = $data[$row + 1][1];
}
}
fclose($handle);
}
echo 'Firstname: '.$firstname.'<br /><br />';
echo 'Surname: '.$surname;
exit;
答案 0 :(得分:1)
您正在获取MartinMartin,因为您要将firstname和surname设置为相同的data [1]值,并在每行迭代中同时回显两者。如果你注释掉echo $ surname,你会发现它只输出了Martin。请记住,马丁的姓Carlin与他的名字不同,所以你不能只用$ surname = $ data [1]来获得它。你需要展望下一行来获得他的姓氏。您可能希望以两步方式迭代$ row数组,这样您就可以索引$ data [$ i] [1]和$ data [$ i + 1] [1]作为名字和姓氏。
$rows = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$rows[] = $data;
}
fclose($handle);
for ($i = 1; $i < count($rows); $i += 2)
{
$first = $rows[$i][1];
$surname = $rows[$i + 1][1];
}
答案 1 :(得分:1)
文档的布局方式,每次while语句循环时都会得到firstname或surname。不是在同一个循环中。您应该重构电子表格:
A - Firstname B - Surname
1 Martin Carlin
2 Next Name
或者您需要在交替循环旋转中添加名字和姓氏