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

时间:2014-06-18 17:53:44

标签: php arrays json

我使用API​​返回一些我在PHP中输出的JSON。

PHP

$result = $api->sendRequest("getUsers", $inputParameters);
$output = json_decode($result, true);

API返回的数组示例。我可以打印出特定的字段值,但我无法弄清楚如何编写一个简单的if语句来指示查询结果中是否有重复的名称,特别是重复的[fullName]字段,如下所示。 / p>

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
                )

        )

)

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

未经测试,但可能会尝试类似

的内容
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 }

答案 1 :(得分:1)

这应该有效:

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

取自here并略有修改。

答案 2 :(得分:0)

只需创建一个数组,其键将是您目前所见的主题的全名:

$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中的所有唯一条目。

答案 3 :(得分:0)

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

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

此外,$names包含原始数组中所有fullName列的唯一数组,以便于访问和遍历。您可以在上面的if语句中使用它来确定哪些名称是重复的,如下所示:

$names_count = array_count_values($names);
foreach($names_count as $key => $value) {
    if(value > 1) {
        $dupes[] = $key;
    }
}

<强>参考文献:

PHP Array Functions

array_column()

array_unique()

array_count_values()