Добрый день. Хочу написать размножение текста. Но что-то не получается. Есть строка: [Привет/Здравствуй], [Артём/Миша/Саша/Паша/Даша/Петя/И другие] На выводе должно быть: Привет, Артём Привет, Миша Привет, Саша Привет, Паша Привет, Даша Привет, Петя Привет, И другие Здравствуй, Артём Здравствуй, Миша Здравствуй, Саша Здравствуй, Паша Здравствуй, Даша Здравствуй, Петя Здравствуй, И другие Для этого написал скрипт: Code: $formyla = "[Привет/Здравствуй], [Артём/Миша/Саша/Паша/Даша/Петя/И другие]"; preg_match_all('/\[(.*?)\]/i', $formyla, $out); foreach($out[1] as $key => $value) { $words = explode('/', $value); foreach($words as $key2 => $value2) { echo str_replace("[".$value."]", $value2, $formyla)."<br>"; } } Но тут появилась проблема. Оно выводит: Привет, [Артём/Миша/Саша/Паша/Даша/Петя/И другие] Здравствуй, [Артём/Миша/Саша/Паша/Даша/Петя/И другие] [Привет/Здравствуй], Артём [Привет/Здравствуй], Миша [Привет/Здравствуй], Саша [Привет/Здравствуй], Паша [Привет/Здравствуй], Даша [Привет/Здравствуй], Петя [Привет/Здравствуй], И другие Попробовал строчку: Привет, [Артём/Миша/Саша/Паша/Даша/Петя/И другие] Выводит: Привет, Артём Привет, Миша Привет, Саша Привет, Паша Привет, Даша Привет, Петя Привет, И другие Не работает размножение если в этой строчке есть 2 разных []. Может кто знает решение?
PHP: <?php $string = '[Привет/Здравствуй], [Артём/Миша/Саша/Паша/Даша/Петя/И другие]'; preg_match_all('/\[(.*?)\]/i', $string, $match); $action = explode('/', $match[1][0]); $names = explode('/', $match[1][1]); for($j = 0; $j < count($action); $j++) { for($k = 0; $k < count($names); $k++) { echo($action[$j] . ', ' . $names[$k] . '<br>'); } } ?>
FireFenix, омг. FreShBY, юзай: PHP: <? $words=array('Привет','Здраствуй'); $names=array('Артём','Миша','Саша','Паша','Даша','Петя','И другие'); foreach($words as $word) foreach($names as $name) echo $word.', '.$name."<br>\r\n"; ?>
Если учитывать исходную строку, тогда так: PHP: <?php $string='[Привет/Здравствуй], [Артём/Миша/Саша/Паша/Даша/Петя/Другие]'; preg_match_all('#\[(.*?)\]#',$string,$match); $words=explode('/',$match[1][0]); $names=explode('/',$match[1][1]); foreach($words as $word) foreach($names as $name) echo $word.', '.$name."<br>\r\n"; ?> FireFenix, так и не юзаешь форич.
А если [] Таких скобок будет в тексте неизвестное количество? Т.е. текст будет вводить каждый раз разные и разными людьми?
Какая разница что юзать? Темболее здесь результат preg_match возвращает не ассоциативный массив. Первое, что пришло в голову : PHP: <?php $string = '[Привет/Здравствуй], [Артём/Миша/Саша/Паша/Даша/Петя/И другие], [Гулять/Пить/Курить]'; preg_match_all('/\[(.*?)\]/i', $string, $match); $action = explode('/', $match[1][0]); $names = explode('/', $match[1][1]); recursion($match, $element, 0, count($match[0]) - 1); function recursion($match, $element, $level, $max_level) { $data = explode('/', $match[1][$level]); for ($i = 0; $i < count($data); $i++) { $element[$level] = $data[$i]; if ($level !== $max_level) { recursion($match, $element, $level + 1, $max_level); } else { echo(implode(', ', $element) . '<br>'); } } } ?>