0

私はphpの初心者で、この問題の解決策を精力的に探してきました(非常に単純な解決策でもあると思います*ため息)。

Google ドキュメントから .csv フィードをインポートしています。「名前」と「場所」の 2 つの列が表示されます。重複した「場所」を削除したいと思います。私はfgetcsvを使用しているので、すでにデータを配列にソートしていることを理解しています。理想的には、「名前」が対応する「場所」の下にリストされているように見えるように、「場所」の重複を省略します。

ここに私が持っているものがあります:

    $url = "https://docs.google.com/spreadsheet/pub?key=0AsMT_AMlRR9TdE44QmlGd1FwTmhRRkFHMzFTeTZhS3c&output=csv";
    $handle = fopen($url, "r");
    while (($data = fgetcsv($handle, 5000, ",")) !== FALSE) {
    echo "<li>\n";
    echo $data[1];
    echo "<br/>\n";
    echo $data[2];
    echo "</li>\n";
    }
    fclose($handle);

理想的には、次のようなものを使用できます。

    $url = "https://docs.google.com/spreadsheet/pub?key=0AsMT_AMlRR9TdE44QmlGd1FwTmhRRkFHMzFTeTZhS3c&output=csv";
    $handle = fopen($url, "r");
    while (($data = fgetcsv($handle, 5000, ",")) !== FALSE) {
    echo "<li>\n";
    echo array_unique($data[1]);
    echo "<br/>\n";
    echo $data[2];
    echo "</li>\n";
    }
    fclose($handle);

助けてくれてありがとう!:o)

4

2 に答える 2

0
<? //PHP 5.4+
$url = 'url to your csv feed';

//Group people by same location first,
//not assuming csv is already sorted.
$namesByLocations = [];
//Because we're using \SplFileObject, when the reference goes out
//of scope at the end of the loop, the file pointer is never
//left open. This is true even if an exception is thrown
//in the middle of looping.
foreach(
    \call_user_function(static function() use ($url){
        $file = new \SplFileObject($url);
        $file->setFlags(\SplFileObject::READ_CSV);
        return $file;
    })
    as $array
){
    //$array[1] is assumed to be location string
    //$array[2] is assumed to be a name that is there.
    $namesByLocations[$array[1]][] = $array[2];
}


foreach($namesByLocations as $location => $names){
    //Protect against injection flaws,
    //escape to destination's context. (html this time)
    echo '<strong>' . \htmlspecialchars($location) . '</strong>';
    echo '<ul>';
    foreach($names as $name){
        echo '<li>' . \htmlspecialchars($name) . '</li>';
    }
    echo '</ul>';
}
?>
于 2012-05-05T21:15:23.377 に答える
0

配列内のアイテムが場所によってグループ化されていると仮定すると、これは機能する可能性があります。最後のデータ項目 (場所) を保存し、各項目がその場所を持っているかどうかを比較します。存在する場合はそれを印刷し、そうでない場合は新しい場所で新しいリスト項目を作成し、その下に名前を印刷します(ただし、テストしていません)。

$url = "the-url-to-my-csv-feed";
$handle = fopen($url, "r");
$lastdata = '';
while (($data = fgetcsv($handle, 5000, ",")) !== FALSE) {
    if ($lastdata == '') {
        echo "<li><strong>" . $data[1] . "</strong>\n";
        echo "<br/>\n";
        $lastdata = $data[1];
    }

    if ($lastdata != $data[1]) {
        echo "</li>\n";
        echo "<li><strong>" . $data[1] . "</strong>\n";
        echo "<br/>\n";
        $lastdata == $data[1];
    }
    echo $data[2] . "<br/>\n";
}
fclose($handle);
于 2012-05-05T20:45:42.850 に答える