2011-03-28 2 views
0

안녕하세요. 나는 처음으로 포스터지만,이 사이트를 여러 번 탐색했습니다. 정확히 어떻게 해결해야할지 모르겠다는 코딩 문제가 있습니다. 우선 내가해야 할 일과 내가 가지고있는 정보에 대해 설명하고, 누군가가 나에게 올바른 방향으로 뉘앙즈를 줄 수 있기를 바랍니다.PHP : 배열 가져 오기 (CSV) 및 지능적으로 정보 반환

내가 가지고있는 정보는 구역 이름, 우편 번호, 도시 이름과 같은 정보가있는 스프레드 시트 (CSV)입니다. 하나의 구역에는 그 아래에 많은 도시가 있어야하며 모든 도시에는 그 아래에있는 많은 우편 번호가있을 가능성이 큽니다. 예를 들면 지금

영역 H, 92603, 얼바인

영역 H, 92,604, 얼바인

존 J, 92,625, 코로나

좋아 그게 다름이 아니라,이 정보로 내가해야 할 일이있다. 도시 이름을 입력하고 그 도시 아래에있는 모든 우편 번호와 도시가 속한 구역을 나에게 돌려 줄 수 있어야합니다. 예를 들어, Chatsworth를 입력하면 나에게 (Zone X) 및 (12345, 12346, 12347)을 우편 번호로 사용합니다 (예제 만).

나는 이것에 대해 가장 좋은 방법이 있는지 모르겠습니다. MySQL 데이터베이스를 만들고 거기에서 작업하거나 .csv 파일에서 작업하거나 PHP 파일에 하드 코딩 할 수 있습니다. 배열 열에서 값을 검색하는 방법을 모르고 다른 열을 그에 따라 반환합니다 (특히 도시마다 여러 우편 번호 사용).

누구든지 나를 도울 수 있으면 크게 감사하겠습니다. 또한 나에게 더 많은 정보가 필요하면 알려 주시기 바랍니다. 독서에 감사드립니다.

+0

내 코드가 아래에 고정되어 있습니다. 의견을 참조하십시오. – Neal

답변

0

존 H, 92603, 어바인

존 H, 92604, 어바인

존 J, 92625, 코로나

파일을 취할 수

및 그것의 모든 내용을 얻으십시오. 다음 새로운 라인으로 그것을 분할 :

$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는이 같은 결과의 배열이 있습니다

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

이 답변은 OP의 질문과 정확히 얼마나 일치합니까? –

+0

@ 브라이언 내가 대답을 편집했습니다 – Neal

+0

@neal '\ n \ r'으로 인코딩 된 개행 문자는 어떻게 계산합니까? –

1

당신이 CSV 접근 방식을 추구하고 싶다면, 그럼 첫 번째 단계입니다 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는 도시가있는 색인입니다. * /}}'? –