首页 > 解决方案 > 识别和收集多维数组中的潜在重复项

问题描述

我有一个类似下面的数组,我想在其中识别重复项;

$names = array(
    array("Name" => "John Smith",      "ID" => 65), 
    array("Name" => "Richard Johnson", "ID" => 96), 
    array("Name" => "John Smith",      "ID" => 1105),
    ...
)

有很多类似的问题,但大多数只涉及在有重复项时返回真/假值,或者只是删除重复项。如果有一个与此结果相同的问题,我深表歉意,我查看但找不到适合我情况的问题。

我只想识别一对包含相同“名称”值但可能不同“ID”值的数组。我知道这可能会导致重复的结果与反转的值,但我想我可以自己解决这个问题。我不想删除重复的值,我只想识别它们。

理想情况下,它会返回一个类似于以下(或类似的东西)的数组;

$dupes = array(
    array(
        array("Name" => John Smith, "ID" => 65),
        array("Name" => John Smith, "ID" => 1105)
    )
)

然后我可以将其处理成更精致和用户友好的数组。

我正在考虑使用递归 in_array 函数,或者可能是第二个工作数组。有任何想法吗?

标签: phparraysduplicates

解决方案


为什么不直接循环并使用名称作为键创建一个新数组?在此处测试以下内容:http: //phptester.net/

$names = array(
    array("Name" => 'John Smith', "ID" => 65), 
    array("Name" => 'Richard Johnson', "ID" => 96), 
    array("Name" => 'John Smith', "ID" => 1105)
);

$users = [];
foreach($names as $usersArray){
    
    $users[$usersArray['Name']]['ids'][] = $usersArray['ID'];
    
}

print_r($users);

或者简单地说:

$names = array(
    array("Name" => 'John Smith', "ID" => 65), 
    array("Name" => 'Richard Johnson', "ID" => 96), 
    array("Name" => 'John Smith', "ID" => 1105)
);

$users = [];
foreach($names as $usersArray){
    
    $users[$usersArray['Name']][] = $usersArray['ID'];
    
}

print_r($users);

推荐阅读