1

これは、公開されている 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;
4

2 に答える 2

1

ドキュメントがレイアウトされる方法では、while ステートメントがループするたびに、名または姓のいずれかが取得されます。両方が同じループ内にあるわけではありません。スプレッドシートを次のようにリファクタリングする必要があります。

    A - Firstname      B - Surname
1   Martin             Carlin
2   Next               Name

または、交互のループ回転で名と姓を追加する必要があります

于 2012-05-16T19:33:39.247 に答える
1

firstname と surname を同じ data[1] 値に設定し、行の繰り返しごとに両方を一緒にエコーするため、MartinMartin を取得しています。echo $surname をコメントアウトすると、Martin だけが出力されることがわかります。Martin の姓 Carlin は彼の名前とは別の行にあることに注意してください。そのため、$surname = $data[1] を実行するだけでは取得できません。彼の姓を取得するには、次の行を先読みする必要があります。$row 配列を 2 段階で繰り返して、$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];
}
于 2012-05-16T19:27:29.277 に答える