Удалить дубликаты значений двух вложенных многомерных массивов - PullRequest
0 голосов
/ 18 июня 2019

Я борюсь с функцией array_diff и другими решениями для моей проблемы, но ничего не дает мне желаемого эффекта.

У меня есть два многомерных массива (вложенная глубина неизвестна), которые возвращаются из базы данных.и будет кодировать и декодировать в JSON.

Массивы выглядят так:

Array ( 
    [0] => Array ( [id] => 1 [lft] => 1  [rgt] => 2  ) 
    [1] => Array ( [id] => 2 [lft] => 3  [rgt] => 4  )
    [2] => Array ( [id] => 3 [lft] => 5  [rgt] => 6  )
    [3] => Array ( [id] => 4 [lft] => 7  [rgt] => 16 )
    [4] => Array ( [id] => 5 [lft] => 8  [rgt] => 9  )
    [5] => Array ( [id] => 6 [lft] => 10 [rgt] => 11 )
    [6] => Array ( [id] => 7 [lft] => 12 [rgt] => 15 )
    [7] => Array ( [id] => 8 [lft] => 13 [rgt] => 14 )
    [8] => Array ( [id] => 9 [lft] => 17 [rgt] => 18 )
)

Array ( 
    [0] => Array ( [id] => 17 [lft] => 1 [rgt] => 2  ) 
    [1] => Array ( [id] => 3  [lft] => 3 [rgt] => 10 )
    [2] => Array ( [id] => 9  [lft] => 4 [rgt] => 9  )
    [3] => Array ( [id] => 24 [lft] => 5 [rgt] => 6  )
    [4] => Array ( [id] => 81 [lft] => 7 [rgt] => 8  )
)

Теперь я хотел бы объединить эти два массива, чтобы я получил первый массив без элементов, которые имеюттакой же идентификатор, как элементы из второго массива.Результат должен выглядеть следующим образом:

Array ( 
    [0] => Array ( [id] => 1 [lft] => 1  [rgt] => 2  ) 
    [1] => Array ( [id] => 2 [lft] => 3  [rgt] => 4  )
    [3] => Array ( [id] => 4 [lft] => 7  [rgt] => 16 )
    [4] => Array ( [id] => 5 [lft] => 8  [rgt] => 9  )
    [5] => Array ( [id] => 6 [lft] => 10 [rgt] => 11 )
    [6] => Array ( [id] => 7 [lft] => 12 [rgt] => 15 )
    [7] => Array ( [id] => 8 [lft] => 13 [rgt] => 14 )
)

Например, я пытался использовать эту модифицированную функцию, к которой подходит другое решение, но, похоже, ничего не работает.Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 18 июня 2019

Вы правы, вам нужно array_udiff .

Попробуйте это:

$res = array_udiff($array1, $array2, function ($a, $b) {
    if ($a['id'] < $b['id']) {
        return -1;
    } elseif ($a['id'] > $b['id']) {
        return 1;
    } else {
        return 0;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...