我所拥有的是具有以下信息的电子表格(CSV):区域名称,邮政编码,城市名称。一个区域应该有许多城市,并且每个城市最有可能有许多邮政编码属于它。例如:
H区,92603,Irvine
H区,92604,欧文
Zone J,92625,Corona
等
好的,现在已经不在了,这就是我需要对这些信息做些什么。我需要能够输入一个城市名称,并将它归还给我所有属于该城市的邮政编码,以及城市所在的区域。例如,如果我输入Chatsworth,它应该给我(区域) X)和(12345,12346,12347)作为邮政编码(仅作为示例)。
我不确定最好的办法。我可以创建一个MySQL数据库并从那里开始工作,或者只是从.csv文件工作,或者将其硬编码到PHP文件中。我不知道如何在数组列中搜索值,然后相应地返回其他列(特别是每个城市有多个邮政编码)。
如果有人可以帮助我,我们将不胜感激。另外,如果您需要我提供更多信息,请随时告诉我。提前感谢大家阅读。
答案 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'),
)