Honda, Honda CRF, Honda CRF-450X
Владивосток, Приморский край -Владивосток
продажа, покупка, цена, с пробегом
Разделить их по переносу строки и по " ,". Получается 2 массива:
1. Массив строк,
2. Массив слов, разделенных запятой.
После, каждое слово разбираю еще на массив, по пробелам в словах. Итого получается 3 массива.
Все, выполнено. Есть так же требование: Фразы не должны конкурировать, т.е. пересекаться по ключам. Например:
Honda
Honda CRF
Honda CRF 450X
Эти фразы включают одна другую и должны быть "разминусованы" таким образом:
Honda -CRF -450X
Honda CRF -450X
Honda CRF 450X
Объясните логику, как должен выполняться в данном случае алгоритм. По факту, мы не знаем ключа, потому что набор слов всегда может быть разный, так же и они могут и не пересекаться.
Была мысль, отсортировать массив 2. Взять 1 элемент за ключ. А дальше как? А если в таком случае 1 слово из массива отлечается от других, а остальные подходят под условие
Логика: после формирования массивов ключевых слов для каждого массива с N ключевыми словами найти максимальный массив с N+M ключевыми словами, N из которых есть в данном. Простым перебором.
glu-dimaz, для каждого массива перебрать все массивы большей длины, и среди тех, в которых есть все ключи этого массива, выбрать самый длинный. Дадно, нарушу день субботний:
foreach($allArrays as $arr) {
$out = $arr;
$length = count($arr);
foreach($allArrays as $other) {
if(count($other) > count($out) && array_intersect($arr, $other) === $length) {
$out = $other;
}
}
// вывод $out с '-' перед теми ключами, которых нет в $arr;
}
glu-dimaz, внутрь моего блока воткните пару echo для отладки и посмотрите, что происходит.
И JSON_UNESCAPED_UNICODE в помощь. Разбираться за вас никто не будет.