Мне нужно получить две струны из одной.

$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.';

Как мне лучше всего этого добиться?

php
0
Paul 8 Мар 2015 в 17:39

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];
?>
1
bladerz 8 Мар 2015 в 15:41

Вы можете использовать регулярные выражения для своего решения. Приведу пример:

$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

0
xmoex 8 Мар 2015 в 15:22
$a = explode("<br/>", $string);

Предоставит вам массив с двумя значениями: запрашиваемые вами строки.

Затем:

echo $a[0];
echo $a[1];

Напечатает две строки.

Или используйте list, чтобы присвоить эти значения запрошенным переменным:

list($service, $product) = explode("<br/>", $string);

Затем, как предлагает Бладерз, повторите взрыв с ' : ' для получения оценок для услуг и продуктов.

0
Marten Koetsier 8 Мар 2015 в 15:14

Просто альтернатива с использованием 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));
0
ilpaijin 8 Мар 2015 в 15:50