Intereting Posts

PHP: выбор массива (CSV) и интеллектуальное возвращение информации

Всем привет. Я первый раз плакат, но я просматривал этот сайт несколько раз. У меня проблема с кодировкой, и я точно не знаю, как ее решить. Сначала я объясню, что мне нужно сделать, и какую информацию у меня есть, и я надеюсь, что кто-то может дать мне толчок в правильном направлении.

У меня есть таблица (CSV), которая имеет следующую информацию: название зоны, почтовый индекс, название города. В одной зоне должно быть много городов, подпадающих под нее, и каждый город, скорее всего, имеет множество почтовых индексов, которые подпадают под него. Например:

Зона H, 92603, Ирвин

Зона H, 92604, Ирвин

Зона J, 92625, Corona

и т.п.

Хорошо, теперь, когда все в порядке, вот что мне нужно сделать с этой информацией. Мне нужно иметь возможность ввести название города и вернуть мне все почтовые индексы, которые попадают под этот город, а также зону, в которой находится город. Например, если я ввожу Чатсуорта, он должен дать мне (Зона X) и (12345, 12346, 12347) в качестве почтовых индексов (просто пример).

Я не уверен, что это лучший способ. Я мог бы создать базу данных MySQL и работать оттуда или просто работать с файлами .csv или жестко кодировать его в файл PHP. Я не знаю, как искать значение в столбце массива, а затем возвращать другие столбцы соответственно (особенно с несколькими почтовыми индексами для каждого города).

Если кто-нибудь может мне помочь, это было бы очень признательно. Кроме того, не стесняйтесь, дайте мне знать, если вам нужна дополнительная информация от меня. Заранее благодарю всех за чтение.

Зона H, 92603, Ирвин

Зона H, 92604, Ирвин

Зона 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; } } 

и в конце u есть массив таких результатов:

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

Если вы хотите использовать 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; } } 

В идеале вы бы включили эту функцию в функцию, поэтому вы можете называть ее несколько раз. Это было бы проще всего, если бы вы сконфигурировали этот столбец для поиска и просто вернули его всю найденную строку.


Хорошо, если вы не знаете, где находится имя города, я бы предложил следующую функцию утилиты:

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

Первый возвращает список из $ rows, которые соответствуют. Я оставлю это для вас, как выяснить, в какой колонке содержится какая. Только для почтового индекса можно как можно точнее вернуть результаты.