Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:获取数组(CSV)并智能地返回信息_Php_Arrays_Csv_Information Retrieval - Fatal编程技术网

PHP:获取数组(CSV)并智能地返回信息

PHP:获取数组(CSV)并智能地返回信息,php,arrays,csv,information-retrieval,Php,Arrays,Csv,Information Retrieval,大家好。我是第一次登海报,但我已经浏览过这个网站很多次了。我有一个编码问题,我不知道该怎么解决。首先,我会解释我需要做什么,我有什么信息,我希望有人能给我一个正确的方向推动 我拥有的是一个电子表格(CSV),它包含以下信息:区域名称、邮政编码、城市名称。一个区域应该有许多城市,每个城市很可能都有许多邮政编码。例如: 欧文92603号H区 欧文92604号H区 J区,92625,科罗纳 等等 好了,现在这已经不成问题了,我需要对这些信息做些什么。我需要能够输入一个城市名称,并让它返回给我所有的邮政

大家好。我是第一次登海报,但我已经浏览过这个网站很多次了。我有一个编码问题,我不知道该怎么解决。首先,我会解释我需要做什么,我有什么信息,我希望有人能给我一个正确的方向推动

我拥有的是一个电子表格(CSV),它包含以下信息:区域名称、邮政编码、城市名称。一个区域应该有许多城市,每个城市很可能都有许多邮政编码。例如:

欧文92603号H区

欧文92604号H区

J区,92625,科罗纳

等等

好了,现在这已经不成问题了,我需要对这些信息做些什么。我需要能够输入一个城市名称,并让它返回给我所有的邮政编码,属于该城市,以及该城市所在的区域。例如,如果我输入Chatsworth,它应该给我(Zone X)和(123451234612347)作为邮政编码(只是一个示例)

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

如果有人能帮助我,我将不胜感激。另外,如果您需要我提供更多信息,请随时通知我。提前感谢大家的阅读

欧文92603号H区

欧文92604号H区

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'),
)

如果要采用CSV方法,则第一步是将文件读入二维数组:

$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名称在哪里,那么我建议使用以下实用函数:

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

第一个返回匹配的$行列表。我将让您决定如何找出哪个列包含哪个。只有对于邮政编码,才有可能确定地返回结果。

这究竟是如何回答OP的问题的?@Brian,所以我想你没有抓住重点。您的解决方案假设OP知道换行编码是什么。“如果不是这样呢?”布赖恩——我加了一句话来说明这一点fact@Wiseguy,这不是必需的,
file\u get\u contents
对他所需要的东西同样有效。谢谢,这似乎是朝着正确的方向迈出的一步。。但假设我不知道城市在哪一排(碰巧是这样)。我会用$I替换[]中的数字,以便它搜索当前行吗?我不知道城市在哪里,所以我必须寻找它。我需要的信息将与城市的信息放在同一行。但是,有些行具有相同的城市名称,但邮政编码不同。因此,我需要获取不同行中的不同邮政编码,并将其应用于该cityname。也许我可以做一些像$zip.=$row[]这样的事情。", ";?@凯文:反过来。要收集邮政编码数组,可以使用
$zip[]=$row[1]。但是如果你不知道城市名称在哪一列,那么你可能不会事先知道哪一列包含数字邮政编码,对吗?搜索问题可以解决,但找到正确的结果是一件难事。难道你不能只做
foreach($key=>row$col){if($col==“Chatsworth”){/*$key是城市所在的索引。*/}
?@Bruno:True。想想看,
$key=array\u search(“Chatsworth”,$row)可能也有用。我要试试这个。。非常感谢您的帮助,我衷心感谢。修复了下面的代码,请参阅评论