PHP: получение массива (CSV) и интеллектуальный возврат информации - PullRequest
0 голосов
/ 28 марта 2011

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

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

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

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

Зона J, 92625, Корона

и т. Д.

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

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

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

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Если вы хотите использовать 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, тогдаЯ бы предложил следующую служебную функцию:

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 голосов
/ 28 марта 2011

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

и в конце получите массив результатов, подобный этому:

$results = array(
   array('Zone B', '12345', 'Searched'),
   array('Zone Z', '35145', 'Searched'),
   array('Zone Q', '12365', 'Searched'),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...