Сравните массивы и исключите один элемент формы, если в других есть дубликаты - PullRequest
0 голосов
/ 25 июня 2019

Мне нужно сравнивать массивы, если элемент из первого или второго массива имеет дубликаты в другом, мне нужно исключить его. Я знаю, это звучит просто, и я уверен, что это так, но я не могу справиться с этой проблемой: (* ​​1001 *

Итак, у меня есть первый массив, подобный этому:

Array:3 [
    6 => blog/something
    4 => blog/somethingElse
    5 => blog/else
]

Второй массив почти идентичен:

Array:3 [
    1 => /blog
    2 => /comments
    3 => /posts
]

И последний массив:

(integer on the left is id of elements in second array, in this example 
comments and posts)
Array:2 [
    0 => array:2 [
        'page_id' => 2
         'value'  => noindex 
    ]
    1 => array:2 [
         'page_id' => 3
         'value'  => noindex 
 ]
 ]

Так что, если у меня есть элемент в массиве первый или второй, которые тоже существуют в массиве и имеют значение = noindex, я должен исключить его.

Я пытался сделать это с помощью foreach recursive, array_walk_recursive, но я все еще не могу получить удовлетворенный результат

Ответы [ 2 ]

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

Сначала получите все индексы, которые нужно исключить, а затем исключите их:

$excludeIndices = array_column(array_filter($array3, function ($entry) {
   return $entry['value'] === 'noindex';
}), 'page_id');

$keepArray1 = array_diff_key($array1, array_flip($excludeIndices));
$keepArray2 = array_diff_key($array2, array_flip($excludeIndices));

Песочница

0 голосов
/ 25 июня 2019

Вы можете фильтровать, используя первые два массива напрямую.

$result = array_filter($last, function($item) use ($first, $second) {
    return !($item['value'] == 'noindex' &&
            (isset($first[$item['page_id']]) || isset($second[$item['page_id']]))
    );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...