Как в функции разобрать текст и возвратить 3 результата?

323
03 марта 2018, 21:34

Всем дорого времени суток.

Есть текст, пример:

Занимаюсь изготовлением, сборкой и установкой Рекламных вывесок, объемных букв и баннеров. Также печатаю на материале. 89000000000. Все делаю от визиток до вывесок. Весь спектр услуг выполняю. #типография@tipografia

Суть функции вырезать из текста телефон, (мое регулярное выражение /89\d{9}/) и вырезать хештег #типография@tipografia (единственная динамическая часть в теге "типография" остальная часть не меняется #******* @tipografia)

и вывести из функции 3 переменных:

  1. $a в которой содержится исходный текст без телефона и хештега.
  2. $b в которой содержится телефон "89000000000".
  3. $c в которой содержится хештег "#типография@tipografia".

Помогите, пожалуйста.

Answer 1

Один из вариантов - сперва получить из строки номер и email, после этого удалить их. Возвращать значения из функции можно как будет удобнее, я для этого использовал функцию compact(), но можно и просто объявить массив, собрать в него все данные и вернуть массив:

<?php
$str = 'Занимаюсь изготовлением, сборкой и установкой Рекламных вывесок, объемных букв и баннеров. Также печатаю на материале. 89000000000. Все делаю от визиток до вывесок. Весь спектр услуг выполняю. #типография@tipografia';
extract(str_parse($str));
// $text  ==  текст
// $tel   ==  телеф.номер
// $email ==  эл.адрес
function str_parse($str) {
    preg_match_all('~\b89\d{9}\b|#[^#\s]+~', $str, $arr);
    $text = preg_replace('~\b89\d{9}\b\.?|#[^#\s]+~', '', $str);
    $tel = $arr[0][0] ?? false;
    $email = $arr[0][1] ?? false;
    return compact('text', 'tel', 'email');
}
?>
<!-- Подставить переменную с номером телефона $tel -->
<textarea rows="17" cols="47" name="text" ><?= $tel ?></textarea>
Answer 2

Еще как вариант можно так.

$text = 'Занимаюсь изготовлением, сборкой и установкой Рекламных вывесок, 
объемных букв и баннеров. Также печатаю на материале. 89000000000. Все делаю 
от визиток до вывесок. Весь спектр услуг выполняю. #типография@tipografia';
$number = preg_replace('~[^0-9]+~','',$text);
$hesh = stristr($text, '#');
$text = str_replace($number, "", $text);
$text = str_replace($hesh, "", $text);

Ответ:

89000000000
#типография@tipografia
Занимаюсь изготовлением, сборкой и установкой Рекламных вывесок, объемных 
букв и баннеров. Также печатаю на материале. Все делаю от визиток до 
вывесок. Весь спектр услуг выполняю. 
READ ALSO
Как сделать нормальную валидацию в Symfony

Как сделать нормальную валидацию в Symfony

В документации по Symfony предлагают два способа: писать аннотации к модели, что не подходит, так как если придут данные без какого то поля, то до валидации...

306
пагинация на php + mysql + js

пагинация на php + mysql + js

здравствуйте, сделал пагинацию и она работает но есть один нюансЯ вывожу количество ссылок по страницам на php то есть от 1

292
Как реализовать умный поиск в строке?

Как реализовать умный поиск в строке?

Подскажите, можно ли как-то осуществить умный поиск в строке?

260