Чтобы решить вашу задачу, давайте разобьем её на несколько шагов. Мы будем использовать PHP для обработки строк, разделения их на массивы и удаления пересечений между фразами.
### Шаги алгоритма:
1. **Исходная строка**: Сначала вам нужна исходная строка, содержащая фразы.
2. **Разделение по строкам**: Используйте `explode()` для разделения фраз по переносу строки, чтобы получить массив строк.
3. **Разделение по запятой**: Для каждой строки в массиве строк, используйте `explode()` снова, чтобы получить массив слов, разделенных запятой.
4. **Обработка пересечений**: Напишите функцию, которая будет проверять пересечения между фразами, и «разминусует» их, удаляя несущественные подстроки:
- Для каждой фразы, которая содержит другие фразы в качестве подстрок, вы можете использовать функцию `strpos()` для проверки наличия подстрок.
- Если одна фраза является подстрокой другой, она должна быть удалена или «разминусована».
5. **Результирующие массивы**: В итоге вы получите три массива: массив фраз, массив слов и массив слов, дополнительно разбитый по пробелам.
### Пример реализации на PHP:
```php
<?php
$inputString = "Honda, Honda CRF, Honda CRF-450X\nВладивосток, Приморский край - Владивосток\nпродажа, покупка, цена, с пробегом";
// 1. Разделение строк
$lines = explode("\n", $inputString);
// 2. Разделение по запятой и создание массивов
$phraseArray = [];
$wordArray = [];
foreach ($lines as $line) {
$phrases = explode(',', $line);
foreach ($phrases as $phrase) {
$trimmedPhrase = trim($phrase);
if (!empty($trimmedPhrase)) {
$phraseArray[] = $trimmedPhrase;
$words = explode(' ', $trimmedPhrase);
foreach ($words as $word) {
$wordArray[] = $word;
}
}
}
}
// 3. Удаление пересечений
function removeOverlaps($phrases) {
$result = [];
foreach ($phrases as $phrase) {
$isOverlapping = false;
foreach ($phrases as $compare) {
if ($phrase !== $compare && strpos($compare, $phrase) !== false) {
$isOverlapping = true;
break;
}
}
if (!$isOverlapping) {
$result[] = $phrase;
}
}
return $result;
}
$uniquePhrases = removeOverlaps($phraseArray);
// 4. Разделение слов по пробелам
$finalWordArray = [];
foreach ($uniquePhrases as $phrase) {
$words = explode(' ', $phrase);
foreach ($words as $word) {
if (!in_array($word, $finalWordArray)) {
$finalWordArray[] = $word;
}
}
}
// Результаты
print_r($uniquePhrases);
print_r($wordArray);
print_r($finalWordArray);
?>
```
### Пояснение к коду:
1. **Исходная строка**: Мы объявили переменную `$inputString` с исходными фразами.
2. **Разделение по строкам и запятой**: Сначала мы разбиваем строки, а затем разбиваем каждую строку по запятой, собирая фразы и слова.
3. **Удаление пересечений**: Функция `removeOverlaps()` проверяет, является ли одна фраза подстрокой другой, и создает массив с уникальными фразами.
4. **Разделение слов по пробелам**: Создается финальный массив слов из уникальных фраз.
Теперь у вас есть три массива: массив уникальных фраз, массив всех слов и массив уникальных слов. Вы можете использовать их по своему усмотрению.