|
|
|
| Подскажите как из такой строки :
541-87-42; 067-205-47-01 Василий
получить такой набор переменных
$phone = 5418742;
$phone1 = 0672054701;
$name = "Василий";
|
Тобиш надо определить сколько номеров телефонов вбито пользователем (между телефонами может быть точка с запятой , просто запятая, пробел или еще что-то что взбредет пользователю),
надо отделить текстовую составляющую и поместить ее в переменную name, в телефонах надо
поудалять символы тире(-). Ничего умного в голову не приходит - решил спросить. | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 16:53)
| | Телефонов всегда два? Или их количество произвольное? | |
|
|
|
|
|
|
|
для: cheops
(26.12.2010 в 17:26)
| | от одного до трех | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 18:07)
| | В имени пользователя пробела быть не может? | |
|
|
|
|
|
|
|
для: cheops
(26.12.2010 в 18:12)
| | Может и тогда понадобиться создавать переменные $otchestvo и $familia например | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 18:25)
| | >Может и тогда понадобиться создавать переменные $otchestvo и $familia например
:-))) | |
|
|
|
|
|
|
|
для: Trianon
(26.12.2010 в 18:29)
| | а что смешного? | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 19:18)
| | зависимость создания переменных от входных данных скрипта - потеря контроля над вычислительным процессом например. | |
|
|
|
|
|
|
|
для: Trianon
(26.12.2010 в 19:24)
| | переменные можно создать невзирая на входные данные скрипта, если второго и третего слова не будет то оставить их пустыми, если будут , то записать в них данные. Или я что-то не так понял?
Если это нереально или очень сложно, то в принципе устроит получение массива в котором в таком виде будут два телефонвна 33333333 44444444444 и ИМЯ если оно есть | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 19:29)
| | А почему я не могу написать так:
Имя 23 4343 24 434; 2343 34 35, 34-323-5
? Ведь у вас, очевидно, "как вздумается - так и пишут". | |
|
|
|
|
|
|
|
для: neadekvat
(26.12.2010 в 19:38)
| | Можете и так, видать гиблая это затея, ну а хотя бы телефоны выбрать и поудалять тире и пробелы (если они есть )между цифрами реально? | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 19:40)
| | Может, проще будет просить пользователей вводить каждый телефон и свое имя отдельно? | |
|
|
|
|
|
|
|
для: neadekvat
(26.12.2010 в 19:53)
| | Может и проще, но задача стоит именно средствами php решить вопрос | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 20:05)
| | Кто так поставил задачу? | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 19:40)
| | >Можете и так, видать гиблая это затея, ну а хотя бы телефоны выбрать и поудалять тире и
>пробелы (если они есть )между цифрами реально?
Можно начать отталкиваться от следующего скрипта
<?php
$str = "541-87-42; 067-205-47-01 Василий
541-87-42; 067-205-47-01 Василий
541-87-42; 067-205-47-01 Василий
541-87-42; 067-205-47-01 Василий";
// Получаем отдельные строки
$lines = explode("\r\n", $str);
// В цикле обрабатываем каждую отдельную строку
for($i = 0; $i < count($lines); $i++)
{
// Получаем отдельные подстроки
$items = preg_split("|[\s]+|", $lines[$i]);
// Выделяем телефоны
$phones = array();
for($j = 0; $j < count($items); $j++)
{
$items[$j] = trim($items[$j], ",; ");
// Проверяем телефон ли это
if(preg_match("|[-\d]+|", $items[$j]))
{
// Удаляем тире
$items[$j] = str_replace("-", "", $items[$j]);
// Помещаем телефон-результат в массив
$phones[] = $items[$j];
}
}
// Выделяем имя
$name = "";
if(preg_match("|[^\d]+$|i", $lines[$i], $out)) $name = $out[0];
// Результат
echo "Имя = $name<br>";
echo "Телефоны";
echo "<pre>";
print_r($phones);
echo "</pre>";
}
?>
|
Не обязательно все делать за один заход. Я обычно обрабатывают такие текстовые базы в несколько заходов: простым скриптом обрабатываю основную массу данных, выделя все, что не подверглось обработки, пишу следующий скрипт для исключительных позиций и так до тех пор, пока не останется штук 50 совершенно диких позиций, которые можно обработать и в ручную (ну это конечно, если задачу нужно решить лишь один раз). | |
|
|
|
|
|
|
|
для: cheops
(27.12.2010 в 11:32)
| | Спасибо, буду разбираться! | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 19:29)
| | На стороне клиента выставите условие, что телефонные номера должны вводиться только цифрами без всяких дефисов и прочего, при чем номера должены быть разделены между собой, например, запятой. Проверку этого поля не трудно на стороне клиента устроить с помощью рег. выражений. Ну а если "обманут" и пришлют бог невесть что, то формат записи совсем не сложно проверить числа_запятая_числа_запятая_числа, и если не соответствует, то возврат, иначе то, что вам надо. | |
|
|
|
|
|
|
|
для: sim5
(26.12.2010 в 20:07)
| | не получиться | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 20:17)
| | Это почему? | |
|
|
|
|
|
|
|
для: sim5
(26.12.2010 в 20:20)
| | Парсер контента пишеться. | |
|
|
|
|
|
|
|
для: starpom
(26.12.2010 в 20:35)
| | так бы сразу и сказали. | |
|
|
|