Сравните два массива и найдите все дубликаты в отдельном значении (php) - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть два массива, первый как старый, второй как новый. Я хочу сравнить их оба и вывести только дубликаты.

Я пробую что-то с болью: array_intersect и array_search безрезультатно ...

Первый массив (старый) содержит в качестве вывода:

[0] => Array (
    [id] => old_id_1
    [color] => red
 )

[1] => Array (
    [id] => old_id_2
    [color] => blue
 )

[2] => Array (
    [id] => old_id_3
    [color] => green
 )

[3] => Array (
    [id] => old_id_4
    [color] => purple
 )

[4] => Array (
    [id] => old_id_5
    [color] => yellow
 )

Второй (новый) выход:

[0] => Array (
    [id] => new_id_1
    [color] => blue
)


[1] => Array (
    [id] => new_id_2
    [color] => pink
)


[2] => Array (
    [id] => new_id_3
    [color] => purple
)

Как возвращение, я хочу сделать что-то вроде:

We find 2 duplicates colors :
-  blue (new_id_1) in old_id_2 
-  purple (new_id_3) in old_id_4

Если у кого-то есть идеи.

1 Ответ

0 голосов
/ 02 ноября 2018

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

$firstArr  = [
    ['id' => 'old_id_1', 'color' => 'red'],
    ['id' => 'old_id_2', 'color' => 'blue'],
    ['id' => 'old_id_3', 'color' => 'green'],
    ['id' => 'old_id_4', 'color' => 'purple'],
    ['id' => 'old_id_5', 'color' => 'yellow'],
];
$secondArr = [
    ['id' => 'new_id_1', 'color' => 'blue'],
    ['id' => 'new_id_2', 'color' => 'pink'],
    ['id' => 'new_id_3', 'color' => 'purple'],
];

$firstArrAssoc = array_combine(array_column($firstArr, 'color'), array_column($firstArr, 'id'));
$duplicatesArr = [];
foreach ($secondArr as $row) {
    if (array_key_exists($row['color'], $firstArrAssoc)) {
        $duplicatesArr[] = "-  $row[color] ($row[id]) in {$firstArrAssoc[$row['color']]}";
    }
}
echo "We find " . count($duplicatesArr) . " duplicates colors :\n";
echo implode("\n", $duplicatesArr);

Выход:

We find 2 duplicates colors :
-  blue (new_id_1) in old_id_2
-  purple (new_id_3) in old_id_4

Попробуйте с 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...