2011-03-28 13 views
0

皆さん。私は初めてのポスターですが、私はこのサイトを何度も閲覧しました。私はコーディング上の問題を抱えています。私は解決方法を正確には分かりません。最初に私は何をする必要があるのか​​、どのような情報があるのか​​を説明し、誰かが私に正しい方向に微笑を抱かせることを願っています。PHP:配列取得(CSV)とインテリジェントな返信

私が持っているものは、ゾーン名、郵便番号、都市名という情報を持つスプレッドシート(​​CSV)です。 1つのゾーンには多数の都市があり、各都市には多くの郵便番号が含まれています。例えば:今

ゾーンH、92603、アーバイン

ゾーンH、92604、アーバイン

ゾーンJ、92625、コロナ

さて、それは途方もない、ここで私はこの情報で何をする必要があるのですか。私は都市名を入力して、その都市の下にあるすべての郵便番号と街があるゾーンを私に返してもらう必要があります。例えば、私がChatsworthを入力すると、 X)と(12345,12346,12347)を郵便番号(一例)として使用します。

私はこれについて最善の方法を知りません。 MySQLデータベースを作成してそこから作業したり、.csvファイルから作業したり、PHPファイルにハードコードすることができます。私は配列の列の値を検索する方法を知らず、それに応じて他の列を返します(特に都市ごとに複数の郵便番号がある場合)。

誰かが私を助けることができれば、それは非常に感謝します。また、私からのより多くの情報が必要な場合は、私に知らせてください。読者全員に事前に感謝します。

+0

下のコードを修正しました。コメントを参照してください – Neal

答えて

0

ゾーンH、92603、アーヴィン

ゾーンH、92604、アーヴィン

ゾーンJ、92625、コロナ

など

あなたは、ファイルを取ることができ、すべての内容を取得します。あなたはCSVのアプローチを追求したい場合は、最初のステップがある

$results = array(
    array('Zone B', '12345', 'Searched'), 
    array('Zone Z', '35145', 'Searched'), 
    array('Zone Q', '12365', 'Searched'), 
) 
+0

これはOPの質問にどのくらい正確に答えますか? –

+0

@Brian私の回答を編集しました – Neal

+0

@neal '\ n \ r'としてコード化された改行をどうお考えですか? –

1

$searchCity = 'Searched'; //or whatever city you are looking for 
$file = file_get_contents('file.csv'); 
$results = array(); 
$lines = explode("\n",$file); 
//use any line delim as the 1st param, 
//im deciding on \n but idk how your file is encoded 

foreach($lines as $line){ 
    //split the line 
    $col = explode(",",$line); 
    //and you know city is the 3rd element 
    if(trim($col[2]) == $searchCity){ 
     $results[] = $col; 
    } 
} 

と終わりにuは、このような結果の配列を持っています。そして、新しいラインでそれを分割ファイルを2次元配列に読み込みます。

$csv = array_map("str_getcsv", file("file.csv")); 

これは、どの列がどの列かを知る必要があるインデックス付き配列です。あなたは市が、他の情報を検索[2]に常に知っている場合でも、簡単になる:あなたは複数回それを呼び出すことができるように

foreach ($csv as $i=>$row) { 
    if ($row[2] == "Chatsworth") { 
     $zone = $row[0]; 
     $zip = $row[1]; 
     break; 
    } 
} 

理想的には、関数にこれを入れてしまうでしょう。検索する列を構成可能にして、完全に見つかった行を戻すようにすると、最も簡単です。$の都市名が入っている場所がわからない場合は、その後、私はユーティリティ関数以下の提案するよう


がわかりました:

function search_csv($city) { 
    global $csv; // pre-parsed array (can be parameter though) 

    foreach ($csv as $i=>$row) { 
     if (in_array($city, $row)) { 
      $result_rows[] = $row; 
     } 
    } 
    return $result_rows; 
} 

function search_zip($city) { 
    $rows = search_csv($city); 
    foreach ($rows as $i=>$row) { 
     $rows[$i] = end(array_filter($row, "is_numeric")); 
    } 
    return $rows; 
} 

最初のものは、どの試合$行のリストを返します。どの列にどの列が含まれているか把握する方法をあなたに任せます。郵便番号についてのみ、結果を決定論的に返すことは可能です。

+0

ありがとう、これは正しい方向の一歩です。都市がどの列にあるのかわからない(それは事実である)。 []の数字を$ iと置き換えるだけで、現在の行が検索されますか?私は都市がどこにあるかわからないので、私はそれを検索しなければならない。そして私が必要とする情報は、都市と同じ列にあります。ただし、行の中には都市名が同じで、郵便番号が異なるものがあります。だから私は別の行にある別の郵便番号を取得し、そのcitynameに適用する必要があります。多分$ zip。= $ row []のようなことをすることができます。 "、"; – Kevin

+0

@ケビン:もう一つの方法ラウンド。郵便番号の配列を集めるには '$ zip [] = $ row [1];'を使います。しかし、都市名がどの列であるかわからない場合は、数字の郵便番号を保持しているのは事前にわからないでしょう。検索の問題を解決することはできますが、適切な結果を見つけることは大成功です。 – mario

+1

'foreach($ row as $ key => $ col){if($ col ==" Chatsworth "){/ * $ keyは都市があるインデックスです。 * /}} '? –