[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнение числа с маской.
Karev
Есть такая задачка.
Имеем файл, в котором содержится N строк вида (Число; текст; текст).
К примеру, (почтовый индекс;почтовый адрес;фамилия).
Нужно найти и вывести все строки, в которых почтовый индекс соответствует маске.
К примеру, 64*9** или **1**8
Можно, конечно, познаково создать из числа массив и тупо поэлементно сравнивать его с аналогичным массивов маски. Это работает, я проверил.
Но, скорее всего, это неэффективно. Альтернатива - функции работы со строками и регулярные выражения (не уверен, так как
все эти preg_match и strcmp только начал изучать):
<?
// получаем маску
if (isset($_GET["mask"])) {$mask = $_GET["mask"];}else{exit;}

$fi = fopen("info.txt", "r");
while(!feof($fi))
{
// разбираем строки, вытаскиваем почтовый индекс
preg_match_all("(\d+);([^\r]+);([^\r]+)", $s, $res);
$ind= $res[1][0];
/*
вот тут проблема. как создать в соответствии с маской регулярное выражение,
по которому и будем проверять совпадение с текущим почтовым индексом?
preg_replace ???
$ind_mask = "??????";
*/

// далее опять всё понятно - выводим строки с совпавшим почтовым индексом

if ( preg_match ($ind_mask, $ind)){
echo "<p>".$res[1][0]." ".$res[2][0]." ".$res[2][0]."</p>";
}
}

fclose($fi);
?>

Заранее благодарен за подсказки и критику.



Спустя 53 минуты, 5 секунд (1.11.2010 - 15:05) linker написал(а):
Ну можно так
<?php
if (!isset($_GET["mask"])) exit;
$mask = '/^' . str_replace('*', '\d', $_GET["mask"]) . '$/';

$fi = fopen("info.txt", "r");
while(!feof($fi))
{
$s = fgets($fi);
$data = explode(';', trim($s));
if ( preg_match ($mask, $data[0]))
echo "<p>" . join(' ', $data) . "</p>";
}
fclose($fi);
?>

Спустя 19 минут, 48 секунд (1.11.2010 - 15:25) twin написал(а):
preg_quote() не помешала бы еще

Спустя 1 час, 59 минут, 36 секунд (1.11.2010 - 17:24) Karev написал(а):
Цитата (linker @ 1.11.2010 - 16:05)
Ну можно так
<?php
if (!isset($_GET["mask"])) exit;
$mask = '/^' . str_replace('*', '\d', $_GET["mask"]) . '$/';

$fi = fopen("info.txt", "r");
while(!feof($fi))
{
$s = fgets($fi);
$data = explode(';', trim($s));
if ( preg_match ($mask, $data[0]))
echo "<p>" . join(' ', $data) . "</p>";
}
fclose($fi);
?>

Спасибо, помогло. biggrin.gif
Теперь гораздо шустрее работать стало.

Спустя 7 минут, 34 секунды (1.11.2010 - 17:32) Karev написал(а):
Цитата (twin @ 1.11.2010 - 16:25)
preg_quote() не помешала бы еще

Спасибо за совет. wink.gif

Спустя 16 часов, 20 минут, 12 секунд (2.11.2010 - 09:52) linker написал(а):
twin
Само-собой разумеющееся. wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.