简体   繁体   English

比较两个数组,并以一个特定的值(php)查找所有重复项

[英]Compare two arrays and find all duplicates in a sepcific value (php)

I have two arrays, first as old, second as new. 我有两个数组,第一个数组为旧数组,第二个数组为新数组。 I want compare both of them and output only duplicates. 我想比较它们两个,只输出重复项。

I try somethings with a pain : array_intersect and array_search without any results... 我尝试用出头疼痛: array_intersectarray_search没有任何结果...

First array (old) contains as output : 第一个数组(旧)包含作为输出:

[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
 )

The second (new), output : 第二个(新),输出:

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


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


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

As return, i want make something like : 作为回报,我想做些类似的事情:

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

If anyone have some ideas. 如果有人有什么想法。

Try this: 尝试这个:

$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);

Output: 输出:

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

Try it with 3v4l.org 与3v4l.org一起尝试

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM