PHP:采用数组(CSV)并智能返回信息

时间:2011-03-28 18:10:30

标签: php arrays csv information-retrieval

嘿大家好。我是第一次发布海报,但我已多次浏览过这个网站。我有一个编码问题,我不确定如何解决。首先,我将解释我需要做什么,以及我有什么信息,我希望有人可以给我一个正确方向的推动。

我所拥有的是具有以下信息的电子表格(CSV):区域名称,邮政编码,城市名称。一个区域应该有许多城市,并且每个城市最有可能有许多邮政编码属于它。例如:

  

H区,92603,Irvine

     

H区,92604,欧文

     

Zone J,92625,Corona

     

好的,现在已经不在了,这就是我需要对这些信息做些什么。我需要能够输入一个城市名称,并将它归还给我所有属于该城市的邮政编码,以及城市所在的区域。例如,如果我输入Chatsworth,它应该给我(区域) X)和(12345,12346,12347)作为邮政编码(仅作为示例)。

我不确定最好的办法。我可以创建一个MySQL数据库并从那里开始工作,或者只是从.csv文件工作,或者将其硬编码到PHP文件中。我不知道如何在数组列中搜索值,然后相应地返回其他列(特别是每个城市有多个邮政编码)。

如果有人可以帮助我,我们将不胜感激。另外,如果您需要我提供更多信息,请随时告诉我。提前感谢大家阅读。

2 个答案:

答案 0 :(得分:1)

如果您想采用CSV方法,那么第一步是将文件读入2D数组:

$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;
    }
}

理想情况下,您可以将其放入一个函数中,因此您可以多次调用它。如果你可以配置哪个列进行搜索,那么这将是最容易的,只需让它返回完整的找到的行。


好的,如果您不知道$ city name的位置,那么我建议使用以下实用程序功能:

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;
}

第一个返回匹配的$行列表。我会告诉你如何确定哪个列包含哪个列。只有邮政编码才能确定性地返回结果。

答案 1 :(得分:0)

  

H区,92603,Irvine

     

H区,92604,欧文

     

Zone J,92625,Corona

     

您可以获取该文件并获取其所有内容。然后用新行分开:

$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;
    }
}

最后你有一个结果数组如下:

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