1

Web ページに単純なドロップダウン ボックスがあります。その中には、米国のすべての州があります。ユーザーが州を選択すると、ユーザーが選択した州にある会社のみを PHP スクリプトで (HTML として) 返すようにしたいと考えています。

次のような csv ファイルがあります。

stateId,company,contact,phone,when,addy1
3,abc mining,George,555-555-1234,june 6 2012,"Bronx,NY"
2,xyz mining,Fred,555-555-2345,june 7 2012, "ワシントン州シアトル"
0、私の会社、私、555-555-3456、2012 年 6 月 8 日、"オレゴン州ユージーン"
3、あなたの会社、あなた、555-555-4567、2012 年 6 月 9 日、"ニューヨーク州ブロンクス"

そして何度も何度も....

上記を使用して、HTML テーブルを介して、stateId = 3 のデータ (または csv の行) のみを返します。

だから... fgetcsvを使用する多くの方法を見てきましたが、どうすれば上記の問題を達成できますか?

ドロップダウンの選択されたインデックス値を取得し、それを条件として渡し、各行を繰り返し、状態 ID が 3 のものだけを出力すると考えていました...

理想的には表に出力したいのですが、リストやストレートテキストでも構いません。

PHP は比較的新しいものです (調べてから 10 年以上経ちます...) - 本当に助けていただければ幸いです。

私は知っています...データベースの方が簡単ですが、csvを完全に制御しているため、当面はこのルートに進みます。

    <?php

echo "<table>\n";

$row = 0;
$handle = fopen("mycsvfile.csv", "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($row == 0) {
       // column line
        $num = count($data);
        echo "<thead>\n<tr>";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo "<th>" . $data[$c] . "</th>";
        }
        echo "</tr>\n</thead>\n\n<tbody>";
    } else {
        // non-header lines
        $num = count($data);
        echo "<tr>";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo "<td>" . $data[$c] . "</td>";
        }
        echo "</tr>\n";
    }
}
fclose($handle);

echo "</tbody>\n</table>";

?>

この時点でそれを失い始めます...これは単にすべてのデータを出力します-変数を介してユーザーが選択した状態のデータのみを表示し、選択されていない他の状態の行を出力しない必要があります。

strpos()、explode()、split() を使用しますか... 私は、php の経験がほとんどない dotNet プログラマーであり、学びたいと思っています。これは私の最初のプロジェクトです。私はphp関数/メソッドを知りませんし、使用したこともないので、それらに精通していません。;)

私は XAMPP を起動して実行しているので、完全に絶望的ではありません。

4

3 に答える 3

2

これが私がやったことです...

    <?php
   $selectedSt = $_GET["states"];// get method - should clean the data...
$row = 0;
$handle = fopen("mycsv.csv", "r");//open file
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($row == 0) {//skip first row (headers)
                $row++;} 
                else {
        $stAbbrev = $data[0];
        if ($stAbbrev == $selectedSt){//show only selected state
            $num = count($data);
            $row++;
            for ($c=0; $c < $num; $c++) {
                if ($c==0){}
                else{
                    if ($data[$c]==""){}//if empty line
                    else{echo $data[$c]."<br />";}}}//write array item
                    echo "<br />";}}}//end it all with some white space
    fclose($handle);       
?>
于 2012-09-26T19:58:23.830 に答える
1

データが配列にあると仮定します。それを行う方法の演習は、読者に任されています。

$state_data = array( 
  array( 
    'id' => '3',
    'company' => 'abc mining',
    'contact' => 'George',
    'phone' => '555-555-1234',
    'when' => 'june 6 2012',
    'addy' => 'Bronx,NY' ),
  array(
    'id' => '2',
    'company' => 'xyz mining',
    'contact' => 'Fred',
    'phone' => '555-555-2345',
    'when' => 'june 7 2012',
    'addy' => 'Seattle,WA' ),

 ...

);

次に、ID が 3 のすべてのサブアレイを除外する必要があります。

function filter_out( $var ) {
  return ('3' == $var['id']);
}

$my_states = array_filter( $state_data, "filter_out" );

最後に、出力:

<table summary="state data">
<tr>
  <th>ID</th>
  <th>Company</th>
  <th>Contact</th>
  <th>Phone</th>
  <th>When</th>
  <th>Addy</th>
</tr>

<?php
foreach( $my_states as $my_state ) {
?>
<tr>
  <td><?php echo( $my_state['id'] ); ?></td>
  <td><?php echo( $my_state['company'] ); ?></td>
  <td><?php echo( $my_state['contact'] ); ?></td>
  <td><?php echo( $my_state['phone'] ); ?></td>
  <td><?php echo( $my_state['when'] ); ?></td>
  <td><?php echo( $my_state['addy'] ); ?></td>
</tr>
<?php } ?>

</table>
于 2012-08-02T21:02:34.087 に答える
0

here で説明されているように、ファイルを行ごとに読み取るにはループが必要です。ループでは、各行がフィールド値の配列として返されます。ユーザーが選択した stateId をテストし、一致した場合は、その配列を別の配列に格納します。出力については、今度は結果の配列を介して再度ループし、適切と思われる各要素の周りに html マークアップをラップし、そのマークアップを文字列に連結します。この文字列をクライアントに送信します。

于 2012-08-02T20:59:49.360 に答える