как вычислить разницу масивов

Статус
В этой теме нельзя размещать новые ответы.

Unsiker

Новичок
Есть 2 масива:
PHP:
Array
(
    [0] => 16
    [1] => 17
)
Array
(
    [0] => 16
    [1] => 17
    [2] => 18
)
подскажите, как получить третий масив который будет будет содержать елементы, которые отсутвуют в другом масиве?
В данном случае:
PHP:
Array
(
    [0] => 18
)
 

Unsiker

Новичок
PHP:
<?php 
$a1 = array(16,17);
$a2 = array(16,17,18);

$diff = array_diff($a1, $a2);
echo "<pre>";
print_r($diff);
echo "</pre>";
Выводит пустой масив, но в функции array_diff можно поменять параметры и тогда все заработает, проблема в том что масивы динимические и заранее неизвестно сколько елементов в каком масиве, а считать количество елементов и в зависимоти от этого вызывать функции как то непрофесилнально. вот и ищу хорошее решение данной задачи
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Можешь сделать перебором)
 

ksnk

прохожий
Unsiker Что-то не догоняю. Что нужно сделать-то? Вот в таком случае что должно получится?
PHP:
Array
(
    [0] => 16
    [1] => 17
    [2] => 19
)
Array
(
    [0] => 16
    [1] => 17
    [2] => 18
)
18 и 19 одновременно или что?
 

Yoskaldyr

"Спамер"
Партнер клуба
в принципе правильно ответили array_diff и только он. Просто надо внимательно читать документацию
Функция array_diff() возвращает массив, состоящий из значений массива массив_1, которые отсутствуют в любом другом массиве, перечисленном в последующих аргументах.
т.е. код должен быть таким:
PHP:
<?php 
$a1 = array(16,17);
$a2 = array(16,17,18);

$diff = array_diff($a2, $a1);
echo "<pre>";
print_r($diff);
echo "</pre>";
 

Yoskaldyr

"Спамер"
Партнер клуба
Если надо проверить несколько массивов сразу:
PHP:
<?php 
$a1 = array(16,17);
$a2 = array(16,17,18);
$a3 = array(16,17,19);
$a4 = array(16,17,20);

$merge = array_unique(array_merge($a2,$a3,$a4));
$diff = array_diff($merge, $a1);
echo "<pre>";
print_r($diff);
echo "</pre>";
 

Вурдалак

Продвинутый новичок
Yoskaldyr, тебе самому не помешало бы читать документацию. Да и проблему, в топике которой собираешься давать советы.
 

MiksIr

miksir@home:~$
А я тоже нихрена не понял, что хочет человек. Какие-то длины массивов...
Если массивы (1, 2, 3) и (1, 2, 4) - что он хочет получить?
Задачу нужно формулировать полностью, а если не получается - рассказывать что его программа делает вообще.
 

Unsiker

Новичок
А я тоже нихрена не понял, что хочет человек. Какие-то длины массивов...
Если массивы (1, 2, 3) и (1, 2, 4) - что он хочет получить?
Задачу нужно формулировать полностью, а если не получается - рассказывать что его программа делает вообще.
Что конкретно непонятного?
В Вашем случае есть масивы (1, 2, 3) и (1, 2, 4) нужно получить масив (4), где 4 это элемент второго масива, который отсутвует в первом.

Как решить задачу, я знаю есть кучка кода и логики типа
PHP:
$c1 = count($a1);
$c2 = count($a2);
if ($c1 > $c2){
    $diff = array_diff($a1, $a2);
} else {
    $diff = array_diff($a2, $a1);
}
или такой

PHP:
$diff = array_merge( array_diff($a1, $a2),  array_diff($a2, $a1) );
но, как то не то, хотелось бы обойтись одной (масимум двумя) функциями для решения задачи, так сказать найти елегантное решение.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Unsiker
Встроенной функции нет, пиши свою.
 

Unsiker

Новичок
Unsiker Что-то не догоняю. Что нужно сделать-то? Вот в таком случае что должно получится?
PHP:
Array
(
    [0] => 16
    [1] => 17
    [2] => 19
)
Array
(
    [0] => 16
    [1] => 17
    [2] => 18
)
18 и 19 одновременно или что?
да (18 и 19 одновременно ) - именно то что нужно на выходе
 

Вурдалак

Продвинутый новичок
Я видимо шокирую автора темы, но тут даже понадобится цикл для общего случая.
 

~WR~

Новичок
PHP:
$diff = array_merge( array_diff($a1, $a2),  array_diff($a2, $a1) );
Это и есть элегантное решение. :)
 

MiksIr

miksir@home:~$
> В Вашем случае есть масивы (1, 2, 3) и (1, 2, 4) нужно получить масив (4), где 4 это элемент второго масива, который отсутвует в первом.

> да (18 и 19 одновременно ) - именно то что нужно на выходе

Клиент путался в своих показаниях...
И что за бред с длиной массива?!
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху