Есть текст. В нем есть скобки. Как вырезать текст в этих скобках и поместить его в в массив? Т.е. каждое слово между скобок (
и )
должно стать элементом массива. И если мы добавим еще скобки, то текст между ними должен тоже автоматически вырезаться в массив. Регулярки использовать нельзя. Нужно как-то циклом наверное... Но не получается. Заранее благодарю за любую подсказку.
На выходе результатом должен быть не один массив, а из каждого отрезка текста между скобочками чтобы создавался отдельный массив с элементами из слов. Например:
Array(2){
[0]=>'Уважаемые'
[1]=>'клиенты'}
Вот текст:
$y='(Уважаемые клиенты)! У некоторых пользователей могут быть трудности с отображением полисов ДМС (в личном кабинете). Спешим вас заверить, что все ваши полисы - действительны (и на их актуальность это не повлияет). В настоящее время мы работаем над проблемой отображения. (Приносим извинения за доставленные неудобства).';
$text='(Уважаемые клиенты)! У некоторых пользователей могут быть трудности с отображением полисов ДМС (в личном кабинете). Спешим вас заверить, что все ваши полисы - действительны (и на их актуальность это не повлияет). В настоящее время мы работаем над проблемой отображения. (Приносим извинения за доставленные неудобства).';
$array = [];
$start = null; $end = null;
foreach(range(0, strlen($text)) as $index){
$symbol = mb_substr($text, $index, 1, 'UTF-8');
if($symbol == "("){
$start = $index+1;
}
if($symbol == ")"){
$end = $index;
$str = mb_substr($text, $start, ($end - $start), "UTF-8");
array_push($array, explode(" ", $str));
}
}
var_dump($array);
Результат:
array(4) {
[0]=>
array(2) {
[0]=>
string(18) "Уважаемые"
[1]=>
string(14) "клиенты"
}
[1]=>
array(3) {
[0]=>
string(2) "в"
[1]=>
string(12) "личном"
[2]=>
string(16) "кабинете"
}
[2]=>
array(7) {
[0]=>
string(2) "и"
[1]=>
string(4) "на"
[2]=>
string(4) "их"
[3]=>
string(24) "актуальность"
[4]=>
string(6) "это"
[5]=>
string(4) "не"
[6]=>
string(16) "повлияет"
}
[3]=>
array(5) {
[0]=>
string(16) "Приносим"
[1]=>
string(18) "извинения"
[2]=>
string(4) "за"
[3]=>
string(24) "доставленные"
[4]=>
string(20) "неудобства"
}
}
Как вырезать текст в этих скобках и поместить его в в массив?
$switch = 1;
$switch == 1
, сохраняете текущий символ в массив$switch = 0;
$y = '(Уважаемые клиенты)! У некоторых пользователей могут быть трудности с отображением полисов ДМС (в личном кабинете). Спешим вас заверить, что все ваши полисы - действительны (и на их актуальность это не повлияет). В настоящее время мы работаем над проблемой отображения. (Приносим извинения за доставленные неудобства).';
$new = [];
$switch = 0;
$strlen = mb_strlen($y);
while ($strlen) {
$first = mb_substr($y, 0, 1, 'UTF-8');
$y = mb_substr($y, 1, $strlen, 'UTF-8');
$strlen = mb_strlen($y);
$first != '(' ?: $switch = 1;
if ($switch == 1 && $first != '(') {
if ($first == ')') {
$switch = 0;
$new[] = '^';
} else {
$new[] = $first;
}
}
}
$tmp = trim(join($new), '^');
$new = explode('^', $tmp);
print_r($new);
Результат:
Array
(
[0] => Уважаемые клиенты
[1] => в личном кабинете
[2] => и на их актуальность это не повлияет
[3] => Приносим извинения за доставленные неудобства
)
Вам нужен конечный автомат (которым, кстати и являются регулярные выражения). Перебираете символы. Если встретили один из ключевых - скобка открывающаяся или закрывающаяся, то в первом случае переключаете автомат в режим накопления фразы в скобках, а во втором выходите из этого режима запомнив то что накопилось.
Это частный простой случай. В общем случае автомата у вас была бы матрица переходов - из какого состояния в какое можно перейти при каких условиях. Так можно было бы распарсить что угодно сложное. Например, математические выражения и формулы.
$y = '(Уважаемые клиенты)! У некоторых .. ДМС (в личном кабинете). Спешим .. действительны (и на .. повлияет). В настоящее .. отображения. (Приносим .. неудобства).';
$found = [];
$word = "";
$eat = false;
for ($i = 0; $i < strlen($y); $i++) {
$ch = $y[$i];
if ($ch === "(") {
$eat = true;
} elseif ($ch === ")") {
$eat = false;
$found[] = $word;
$word = "";
} elseif ($eat) {
$word .= $ch;
}
}
var_dump($found);
Результат:
array(4) {
[0] => string(33) "Уважаемые клиенты"
[1] => string(32) "в личном кабинете"
[2] => string(27) "и на .. повлияет"
[3] => string(40) "Приносим .. неудобства"
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть такой код отправки содержимого корзины на мылоПочему каждый товар отправляется своим письмом (например, если в корзине 3 товара = 3 отдельных...
Настраиваю поиск в гридвью, столкнулась с банальной проблемойВ выводимой таблице на поля из связанных таблиц не добавляется поиск