PHP获取二维数组中指定Key的重复Value

<?php

/**
 * 判断二维数组中指定Key是否存在重复Value
 * @param array $arrInput 二维数组
 * @param string $strKey 键名
 * @return bool
 */
function hasRepeatedValues($arrInput, $strKey)
{
    //参数校验
    if (!is_array($arrInput) || empty($arrInput) || empty($strKey)) {
        return false;
    }

    //获取数组中所有指定Key的值,如果为空则表示键不存在
    $arrValues = array_column($arrInput, $strKey);
    if (empty($arrValues)) {
        return false;
    }

    if (count($arrValues) != count(array_unique($arrValues))) {
        return true;
    }

    return false;
}

/**
 * 获取二维数组中指定Key的重复Value
 * @param array $arrInput 二维数组
 * @param string $strKey 键名
 * @return bool|string 重复的键值(以逗号分隔)
 */
function getRepeatedValues($arrInput, $strKey)
{
    //参数校验
    if (!is_array($arrInput) || empty($arrInput) || empty($strKey)) {
        return false;
    }

    //获取数组中所有指定Key的值,如果为空则表示键不存在
    $arrValues = array_column($arrInput, $strKey);
    if (empty($arrValues)) {
        return false;
    }

    $arrUniqueValues = array_unique($arrValues);
    $arrRepeatedValues = array_unique(array_diff_assoc($arrValues, $arrUniqueValues));
    return implode($arrRepeatedValues, ',');
}


//test
$arrTest = [
    [
        'id'    => 1,
        'name'  => 'test1',
    ],
    [
        'id'    => 1,
        'name'  => 'test2',
    ],
    [
        'id'    => 1,
        'name'  => 'test3',
    ],
    [
        'id'    => 2,
        'name'  => 'test4',
    ],
    [
        'id'    => 2,
        'name'  => 'test5',
    ],
    [
        'id'    => 3,
        'name'  => 'test6',
    ]
];
echo hasRepeatedValues($arrTest, 'id') . "\n";
echo getRepeatedValues($arrTest, 'id') . "\n";

感谢@qiaoweizhen提出了另一种更简洁地实现方式~

function test($arr, $key)
{
    $arr = array_count_values(array_column($arr, $key));
    return array_filter($arr, function ($value) {
        if ($value > 1) {
            return $value;
        }
    });
}

版权声明:本文为zhangliangzi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。