Мне нужно получить две струны из одной.
$string = "Service rating : good<br/>Product : good";
Должен вернуться:
$service = 'good';
$product = 'good';
А также
$string = "Service rating : Excellent service!<br/>Product : Outstanding product - this is the second scarf I've ordered.";
Должен вернуться:
$service = 'Excellent service!';
$product = 'Outstanding product - this is the second scarf I've ordered.';
Как мне лучше всего этого добиться?
4 ответа
Вы можете разделить строку с помощью функции explode
2 раза. Первый - отделить услугу от продукта с помощью тега <br/>
посередине. Второе использование получит соответствующий статус - использование разнесения со строкой ":"
Вот код
<?php
$input = "Service rating : good<br/>Product : good";
list($service, $product) = explode('<br/>', $input);
$service = explode(' : ', $service);
$product = explode(' : ', $product);
echo $service[1];
echo "<br>";
echo $product[1];
?>
Вы можете использовать регулярные выражения для своего решения. Приведу пример:
$string = "Service rating : good<br/>Product : good";
$re = '/^.*\:\s*(?:(?<service>[\w\s]+)\<br\/>).*\:\s*(?<product>[\w\s]+)$/';
if (preg_match($re, $string, $matches))
{
$service = $matches['service'];
$product = $matches['product'];
}
var_dump($service, $product);
Объяснение употребляемого выражения:
- пропустить все с начала до 1-го
:
- извлечь
service
совпадение, разделенное<br/>
- пропустить все до 2-го
:
- извлечь
product
совпадение (до конца строки)
Вы можете поиграть с этим здесь: https://regex101.com/r/vH4aZ9/2
$a = explode("<br/>", $string);
Предоставит вам массив с двумя значениями: запрашиваемые вами строки.
Затем:
echo $a[0];
echo $a[1];
Напечатает две строки.
Или используйте list
, чтобы присвоить эти значения запрошенным переменным:
list($service, $product) = explode("<br/>", $string);
Затем, как предлагает Бладерз, повторите взрыв с ' : '
для получения оценок для услуг и продуктов.
Просто альтернатива с использованием preg_match_all ():
В принципе:
([a-zA-Z\s]+) : ([a-zA-Z\s-\']+)
Поиск группы слов с разрешенными символами внутри квадратных скобок, с точкой с запятой между ними.
Затем вы можете применить свою логику для обработки полученного массива.
$string1 = "Service rating : good<br/>Product : good";
$string2 = "Service rating : Excellent service!<br/>Product : Outstanding product - this is the second scarf I've ordered.";
function getRate($string) {
preg_match_all('#([a-zA-Z\s]+?) : ([a-zA-Z\s-\']+)#', $string, $matches, PREG_SET_ORDER);
return $matches ?: false;
}
var_dump(getRate($string1));
var_dump(getRate($string2));
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.