PHP-检测嵌套数组中的重复值

PHP-检测嵌套数组中的重复值,php,arrays,json,Php,Arrays,Json,我正在使用一个API,它返回一些用PHP输出的JSON PHP API返回的数组示例。我可以很好地打印出特定的字段值,但我不知道如何编写一个简单的if语句来指示查询结果中是否有重复的名称,特别是重复的[fullName]字段,如下所示 Array ( [status] => Array ( [request] => getUsers [recordsTotal] => 3 [reco

我正在使用一个API,它返回一些用PHP输出的JSON

PHP

API返回的数组示例。我可以很好地打印出特定的字段值,但我不知道如何编写一个简单的if语句来指示查询结果中是否有重复的名称,特别是重复的[fullName]字段,如下所示

Array
(
    [status] => Array
        (
            [request] => getUsers
            [recordsTotal] => 3
            [recordsInResponse] => 3
        )

    [records] => Array
        (
            [0] => Array
                (
                    [fullName] => Smith, Tom
                    [firstName] => Tom
                    [lastName] => Smith

                )

            [1] => Array
                (
                    [fullName] => Jones, Bill
                    [firstName] => Bill
                    [lastName] => Jones
                )

            [2] => Array
                (
                    [fullName] => Smith, Tom
                    [firstName] => Tom
                    [lastName] => Smith
                )

        )

)

任何帮助都将不胜感激。

未经测试,但可以尝试以下方法

function dupeCheck($array, $attribute = 'fullName') {
    $list = array();
    foreach($array['records'] as $value) {
        if(in_array($value[$attribute], $list))
            return true;
        $list[] = $value[$attribute];
    }
    return false;
}
只要在记录上迭代,我们就会维护一个属性值列表,一旦它找到一个已经在数组中的属性,就会返回true

那么就:

if(!dupeCheck($output, 'fullName')) { // no dupes in the API response }
这应该起作用:

$data['records'] = array_map("unserialize", array_unique(array_map("serialize", $data['records'])));

摘自并稍作修改。

只需创建一个数组,其键将是您迄今为止看到的Entri的全名:

$names = array();
foreach ($output['records'] as $entry){
    If (isset($names[$entry['fullname']]){
        // do some error processing
        echo "'${entry['fullname']}' is a duplicate";
    }
    $names[$entry['fullname']] = $entry;
}

您应该在
$names
中拥有所有唯一的条目

PHP有很多内置的数组函数来帮助执行这样的操作。您可以尝试以下方法:

$names = array_column($output['records'], "fullName");
if(count(array_unique($names)) < count($names)) {
    ... /* handle duplicate values here */
}
参考文献:


您要用这个阵列做什么?插入表格?如果是这样,我建议您检查是否已经插入了该值。这些用户是否具有与他们关联的唯一id。只是好奇,但汤姆·史密斯似乎是个相当普通的名字。你能绝对确定这些不是不同的用户吗?..@1nflktd不,只是将特定值打印到HTML。因此,如果有重复的[fullName]结果,我想打印出一行简单的文本,指示检测到重复的结果。@War10ck它们确实有唯一的用户ID与之关联,但为了简单起见,我省略了它们。不管怎么说,ID不是很相关,我只需要知道是否有重复的名字。谢谢局长,CJ上面的回答似乎效果最好。没问题,很高兴你得到了答案。
$names = array_column($output['records'], "fullName");
if(count(array_unique($names)) < count($names)) {
    ... /* handle duplicate values here */
}
$names_count = array_count_values($names);
foreach($names_count as $key => $value) {
    if(value > 1) {
        $dupes[] = $key;
    }
}