从数组中获取重复的键

时间:2016-06-01 12:04:29

标签: php arrays associative-array

我有一个像下面这样的数组,我需要检测所有重复的键,而不是值。

$array1 = array(
    "a"             => "Mike",
    "b"             => "Charles",
    "b"             => "Robert",
    "c"             => "Joseph"
);

我使用的所有函数都专注于值,如果我应用flip_array(),它会自动删除重复的键。

2 个答案:

答案 0 :(得分:11)

Array - 密钥永远不会重复,因为它们是唯一标识符。 (与数据库主键一样)

两次声明$array['b']将导致覆盖第一个值。

  

如果数组声明中的多个元素使用相同的键,则只会使用最后一个键,因为所有其他元素都会被覆盖。

按照你的逻辑print_r($array1['b'])输出2个值,这是不可能的。

如果您希望密钥的mulpile值添加维度:

$array1 = array(
    "a"             => "Mike",
    "b"             => array(1 => "Charles", 2 => "Robert"),
    "c"             => "Joseph"
);

print_r($array1['b']);

将返回

Array ( [1] => Charles [2] => Robert )

修改

如果没有办法,你必须使用preg_match的正则表达式和数组作为字符串:

$array1 =' array(
    "a"             => "Mike",
    "b"             => "Charles",
    "b"             => "Robert",
    "c"             => "Joseph"
)';
preg_match_all('/([A-Z])\w+/', $array1, $matches);
print_r($matches[0]);

将返回

 Array ( [0] => Mike [1] => Charles [2] => Robert [3] => Joseph ) 

答案 1 :(得分:1)

使用@TechTreeDev提供的答案,这是我用来显示数组中重复键和值的函数。 参数 textOfArray 将是简单引号上数组的内容。

function findCoincidences($textOfArray) {
    $output = "";

    // Locate all the duplicated Strings (keys and values)
    preg_match_all('/".*?"/', $textOfArray, $matches);

    // Make array where key = string, and value = repetitions
    $arrayCoinc = array_count_values($matches[0]);

    $output = "==== COINCIDENCES  ====<br>";
    foreach ($arrayCoinc as $k => $v){
        if ($v > 1){
            $output .= "<b>".$k."</b> Found:".$v."<br>";
        }
    }
    return $output;
}
echo findCoincidences($array1);

结果:

==== COINCIDENCES ====
"a" Found:4
"f" Found:3
"e" Found:3