Задать вопрос
@glu-dimaz

Как проработать ключи в массиве php?

Добрый.

Стоит задача. Есть набор фраз:

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 слово из массива отлечается от других, а остальные подходят под условие
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Средний 7 комментариев
Решения вопроса 1
@glu-dimaz Автор вопроса
$largest = [];

            foreach ($this->keywords[$a] as $key => $arr) {

                for ($c = 0; $c < count($this->keywords[$a]); $c++) {
        
                    $k = array_search($arr[0], $this->keywords[$a][$c]);

                    if ($k !== false && $c != $key) {

                        if (count($this->keywords[$a][$c]) > count($largest)) {

                            $largest = $this->keywords[$a][$c];

                        }

                    }
                
                }

            }

            foreach ($this->keywords[$a] as $key => $arr) {

                foreach($largest as $add_word){

                    if(!in_array($add_word, $arr)){

                        $this->keywords[$a][$key][] = '-'.$add_word;

                    }

                }

            }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы