Привет, я хотел бы найти набор символов внутри строки, а затем удалить его из другой строки. Например,
$start_state = 'BCFSW|';
$possible_combinations = array('BF','BCF','BFS','BFW');
Я хотел бы, чтобы функция выполняла поиск каждого элемента массива из возможных_комбинаций независимо от его положения. Так, например, для 'BF' должен быть return true, поскольку оба символа присутствуют в BCFSW|.
Я бы также хотел удалить эти символы и сгенерировать из него новую строку массива и добавить ее в другой массив, который будет выглядеть примерно так.
$possible_states = array ('CSW|BF', 'SW|BCF', 'CW|BFS' ,'CS|BFW')
Не могли бы вы, ребята, помочь мне с этим? Это было бы большим подспорьем. Спасибо
Вы можете ответить на мой вопрос ?!






Вы можете использовать регулярные выражения с функциями preg_match и preg_replace.
Пример с BF:
$found = preg_match('#B.*F#', $text);
Вернет истину, если $text - это BF, BAF, BZZF, ...
Вы можете искать все комбинации за один раз, если хотите, используя | (подробности см. В документации по регулярным выражениям).
Если порядок не имеет значения, регулярное выражение может быть '#[BF].*[BF]#
Затем вы можете использовать круглые скобки, чтобы ловить символы и изменять строку с помощью preg_replace().
То, что вы ищете, это "array_diff" . "array_intersect".
Array_diff находит то, что не соответствует между массивами, а array_intersect находит то, что совпадает.
$str = 'BCFSW|';
$arr = array('BF','BCF','BFS','BFW');
$str = str_split($str);
foreach($arr as $item){
$temp = str_split($item);
$new[] = implode("",array_diff($str, $temp)) . implode("",array_intersect($temp, $str));
}
var_dump($new);
Выход:
array(4) {
[0]=>
string(6) "CSW|BF"
[1]=>
string(6) "SW|BCF"
[2]=>
string(6) "CW|BFS"
[3]=>
string(6) "CS|BFW"
}
Решает ли мой ответ вашу проблему?