我有一个字典数组,如下所示
$foo = array(
'key1' => 'value 1',
'key1' => 'value 2',
'key2' => 'value 3',
'key2' => 'value 4',
'key3' => 'value 5'
);
你可以看到有重复的键。所有键都是字符串。数组位于文件中并手动创建。它有近1000个条目,可能有很多重复的密钥。
如何找出重复的密钥?
我想得到的结果是具有重复项的键列表:
key1, key2, ...
所以我可以进入文件并修复这些键以使它们成为唯一的。任何格式都没问题,所以我知道这些键的名称。
key3
没有重复,所以没关系。
非常感谢任何帮助。
感谢。
你们大多数人似乎都在告诉我同样的事情:)我知道我不能拥有多个钥匙。问题是这是一个平面文件中的手动创建的字典数组。创建它的人多次添加相同的密钥。问题是,一个页面上的key1
有翻译A
,但在其他页面上它应该有翻译B
,但由于这两个值在我的词典数组中具有相同的键,因此它们都显示相同的值。
答案 0 :(得分:3)
你做不到。一旦定义了数组,那些“重复键”就会折叠。相应的值将丢失。
答案 1 :(得分:1)
我认为这是一次性工作,以便清除文件中的某些输入数据而不是需要自动发生的事情。
如果您的数据最初是在CSV类型文件中并且您可以访问某些GNU工具,我经常会使用类似
的内容$ cat filenamv.csv | cut -d, -f1 | sort | uniq -d
这应该是CSV文件的第一列,并打印任何重复的密钥。
您需要阅读各个命令(例如man uniq
),以便在您的案例中使用正确的参数。
答案 2 :(得分:1)
每当您创建这样的数组时,您的第一个键'key1' => 'value 1'
将被'key1' => 'value 2'
替换,并继续这样做。因此,您将始终拥有唯一键,并保留最后一个值。
因此,您必须找到一种方法来消除重复密钥,然后再将它们存储到数组中。
您可以将它们加载到MySql中,触发一些查询。如果你想这样做,请告诉我,我会帮你解决问题。
答案 3 :(得分:0)
array_count_values()可能对此有所帮助:
<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>
http://www.php.net/manual/en/function.array-count-values.php
如果您对删除重复值感到满意,那么array_unique()也能做得很好。
答案 4 :(得分:0)
我认为,“Niet the Dark Absol”是对的。无论如何,它应该看起来像这样删除重复的元素。
$foo2 = array();
foreach($foo as $key => $item)
{
if (!array_key_exists($key, $foo2))
{
$foo2[$key] = $item;
}
}
答案 5 :(得分:0)
如果PHP评估文件,则无法执行此操作,但您可能会尝试手动解析文件。
$existing_keys = array();
while (!feof($fh))
{
$str = fgets($fh);
list($key) = explode("=>", $str, 2);
$key = trim($key);
if (isset($existing_keys[$key]))
{
echo "Duplicate key $key\n";
} else
{
$existing_keys[$key] = 1;
}
}