我有一个像下面这样的数组,我需要检测所有重复的键,而不是值。
$array1 = array(
"a" => "Mike",
"b" => "Charles",
"b" => "Robert",
"c" => "Joseph"
);
我使用的所有函数都专注于值,如果我应用flip_array(),它会自动删除重复的键。
答案 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