<?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版权协议,转载请附上原文出处链接和本声明。