LINUX.ORG.RU

php


0

0

всем прив

есть два массива к примеру [20,24,3] и [3,19,23,20]

я хочу как то их пересечь чтоб осталось тоже два массива но уже [24] и [19,23] (то есть удалились одинаковые числа из массивов)

не могу придумать никакого толкого алгоритма ...

что подскажите?

спасибо

★★★

Первый способ
1. Соединить два массива и получить уникальные значения, отбросив дубликаты.
2. Обойти оба массива и удалять из него те числа, которых нет в уникальном массиве.

Второй способ(ИМХО более быстрый)
1. Обойти два массива и создавать по мере обхода ассоциативный массив№3, где ключи будут как раз эти числа. Есть ключ существует, то инкрементировать значение. hint: array_count_values
2. Обойти два массива и удалять( unset($arr1[$i]) ) из них те, что встречаются более одного раза в полученном массиве№3.

Если уж так важна скорость, можно ещё подумать и найти наилучший вариант.

HappyCoder
()
Ответ на: комментарий от HappyCoder

Третий способ
1. Пройтись по двум массивам отдельно через array_count_values() и создать $arrmap1, $arrmap2
2. Пройтись по первому массиву через for each
- если значение > 1, то удалять такой ключ и в первом, и во втором $arrmap
- если значение == 1, то проверить такой же ключ во втором массиве. Если существует $arrmap2[$key], то удалять.
3. Пройтись по втором массиву, удаляя все ключи, где значение > 1

HappyCoder
()

Ну типо так...

$a = array(20,24,3);
$b = array(3,19,23,20);

$a1 = array_diff($a, array_intersect($a, $b));
$b1 = array_diff($b, array_intersect($a, $b));

var_dump($a1);

var_dump($b1);

roller ★★★
()
Ответ на: комментарий от roller

Тогда уж array_intersect($a, $b) вынести в отдельную переменную.

HappyCoder
()
Ответ на: комментарий от fura13

>ага! array_count_values Спасибо! буду разбираться со способами :)

Алгоритм roller-а в два раза быстрее самого вызова array_count_values на 10000 массиве :-)

Так что забудь мой "феерический бред" (с)

HappyCoder
()
Ответ на: комментарий от HappyCoder

Вообще как то по дуацки сделанно в пхп. Есть пересечение, обьеденение, но нет вычитания. А ведь напрашивается же. Недовели до ума :(

roller ★★★
()
Ответ на: комментарий от Chumka

> А с чем связано применение array_intersect? Почему нельзя просто

гы... можно :)

roller ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.