inkShio
@inkShio

Как поймать GET и сравнить со значением в массиве?

Всем привет. Ловлю utm метку к примеру такую ?utm_term=Игрушки в городе Пушкино

Дальше у меня есть такой массив
Array
(
    [0] => Array
        (
            [Message_ID] => 1
            [Title] => Пушкино
            [Morphy] => Пушкино // игрушки в Пушкино
            [Term] => пушкино // слова которые могу встретиться в utm_term
        )

    [1] => Array
        (
            [Message_ID] => 2
            [Title] => Броницы
            [Morphy] => Броницах // игрушки в Броницах
            [Term] => броницы,броницах // слова которые могу встретиться в utm_term
        )
    [2] => Array
        (
            [Message_ID] => 3
            [Title] => Воскресенск
            [Morphy] => Воскресенске // игрушки в Воскресенске
            [Term] => воскресенск,воскресенске // слова которые могу встретиться в utm_term
        )
)


Суть utm_term сравнить с тем, что в [Term] и если есть совпадения вывести [Morphy].

$UtmTerm = htmlspecialchars($_GET["utm_term"]); - ловим utm_term
$UtmTerm = mb_strtolower($UtmTerm); - привидом все нижний регистр
$UtmTermArray = explode(" ", $UtmTerm); - разбираем на массив


получаю Array ( [0] => игрушки [1] => в [2] => городе [2] => пушкино )

foreach($var as $k => $v) {
   $res = array_intersect(explode(",", $v[Term]), $UtmTermArray); // сравниваем получившиеся массивы
   if (!empty($res)) {
       print_r($res);
   }
}


Получаю Array ( [1] => пушкино ) - это то, что в array [Term]

Но как мне вывести не то, что в [Term], а то что [Morphy], т.к. в Morphy - склоненный город.

И вообще может у меня не правильный подход к задаче, посоветуйте может как, что переделать стоит?
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
@Yan-s
$ar =  [
    [
            'Message_ID' => 1,
            'Title' => 'Пушкино',
            'Morphy' => 'Пушкино', // игрушки в Пушкино
            'Term' => 'пушкино', // слова которые могу встретиться в utm_term
   ],[
            'Message_ID' => 2,
            'Title' => 'Броницы',
            'Morphy' => 'Броницах', // игрушки в Броницах
            'Term' => 'броницы,броницах', // слова которые могу встретиться в utm_term
    ],[
            'Message_ID' => 3,
            'Title' => 'Воскресенск',
            'Morphy' => 'Воскресенске', // игрушки в Воскресенске
            'Term' => 'воскресенск,воскресенске', // слова которые могу встретиться в utm_term
     ]
];

$UtmTerm = 'Игрушки в городе Пушкино';
$UtmTerm = mb_strtolower($UtmTerm);
$UtmTermArray = explode(" ", $UtmTerm);

$keys = [];
foreach($ar as $k => $v) {
   $res = array_intersect(explode(",", $v['Term']), $UtmTermArray);
   if (!empty($res)) {
       $keys[] = $k;
   }
}
var_dump($keys); // ключи массивов в которых найдены совпадения в Term


Или сразу получить массив Morphy:
// ...
$results = [];
foreach($ar as $k => $v) {
   $res = array_intersect(explode(",", $v['Term']), $UtmTermArray);
   if (!empty($res)) {
       $results[] = $v['Morphy'];
   }
}
var_dump($results);


Насчет подхода, лучше вынести такую выборку в БД. Если нет, то обеспечить переиспользование кода.

ЗЫ
Добавляйте в вопрос сразу код и данные в таком состоянии, чтобы можно было просто скопировать и запустить.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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