cr1gger
@cr1gger
Все дороги ведут в Рим — встретимся в Риме!

Найти все схождения двух массивов по stripos?

Я сначала сделал так:
<?php
$array=['Yellow', 'Orange','Red','blue','Grey'];
$array2=['Purple', 'grey','Green','Blue','White'];


$intersect_array = array_intersect(array_map('mb_strtolower', $array), array_map('mb_strtolower', $array2));

var_dump($intersect_array);


Но потом понял что у меня бывают случаи когда в слове появляется какая-то соль. И если я сам смогу определить что это то что мне нужно то PHP нет.

Мне нужно чтобы при таком массиве:
$array=['Yellow', 'Orange','Red','blue','Grey'];
$array2=['Purple', 'grey rabbit','Green','Blue color','White'];


Он мне вывел следующие значения: blue или Blue color, Grey или grey rabbit, не важно с какого массива будет брать значение. Главное чтобы он по stripos понял что они совпадают.

Есть функция которая принимает колбэк: array_uintersect
но я так и не понял как делать сравнения и что возвращать.

А писать так:
array_intersect(array_map('mb_stripos', $array), array_map('mb_stripos', $array2));

глупо. так как stripos принимает 2 значения. а array_map отдает по 1. крч я запутался не знаю как это реализовать. Подскажите
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
Tim-A-2020
@Tim-A-2020
$array=['Yellow', 'Orange','Red','blue','blue color','Grey'];
$array2=['Purple', 'grey rabbit','Green','Blue color','White'];

    function my_array_intersect(array $array, array $array2): array
    {
        return  array_filter($array, function ($v, $k) use ($array2) {
            return mb_stripos(implode(',', $array2), $v) !== false ? $v : false;
        }, ARRAY_FILTER_USE_BOTH);
    }
var_dump(my_array_intersect($array, $array2));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
cr1gger
@cr1gger Автор вопроса
Все дороги ведут в Рим — встретимся в Риме!
Крч написали свою функцию:
function my_array_intersect(array $arr1, array $arr2): array
{
        $result = [];
        foreach ($arr1 as $index => $item) {
            if(mb_stripos(implode(',',$arr2), $item)){
                $result[] = $item;
            }
        }
        return $result;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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