Php 删除随机启动的重复行
我有一个包含如下数据的文件:Php 删除随机启动的重复行,php,duplicates,Php,Duplicates,我有一个包含如下数据的文件: randomString-data1 randomString-data2 randomString-data4 randomString-data2 randomString-data2 randomString-data3 randomString-data4 我想要的输出: randomString-data1 randomString-data2 randomString-data4 randomString-data3 随机字符串的长度在20到25个字
randomString-data1
randomString-data2
randomString-data4
randomString-data2
randomString-data2
randomString-data3
randomString-data4
我想要的输出:
randomString-data1
randomString-data2
randomString-data4
randomString-data3
随机字符串的长度在20到25个字符之间。随机字符串并不重要。后面的数据仅具有相关性。删除此类重复项的最佳方法是什么
我所能想到的就是用蛮力的方式在“-”处爆开每一行,并与所有其他行进行比较。但是有更好的办法吗
注意:随机字符串很重要。但是,如果重复条目中的任意一个随机字符串仍然存在,则可以。首先按“\n”然后按“-”将其分解
$arr = explode('\n', $str);
$data = array();
foreach($arr as $val)
{
$temp = explode("-", $val);
$data[$temp[1]] = $temp[0];
}
$str = "";
foreach($data as $k => $v)
{
$str .= $v . "-" . $k;
}
首先用“\n”然后用“-”将其爆炸
$arr = explode('\n', $str);
$data = array();
foreach($arr as $val)
{
$temp = explode("-", $val);
$data[$temp[1]] = $temp[0];
}
$str = "";
foreach($data as $k => $v)
{
$str .= $v . "-" . $k;
}
分解并翻转阵列,然后获取阵列关键点
$content_array = explode($file_contents);
//Remove duplicate entries
$flipped_array = array_flip($content_array);
file_put_contents('/path/to/file', implode("\n", array_keys($flipped_array));
分解并翻转阵列,然后获取阵列关键点
$content_array = explode($file_contents);
//Remove duplicate entries
$flipped_array = array_flip($content_array);
file_put_contents('/path/to/file', implode("\n", array_keys($flipped_array));
我会这样做的
<?php
$file = <<<EOF
randomString-data1
randomString-data2
randomString-data4
randomString-data2
randomString-data2
randomString-data3
randomString-data4
EOF;
$found = [];
foreach (explode("\n", $file) as $line) {
list(, $date) = explode('-', $line);
if (!isset($found[$date])) {
echo "$line<br>";
$found[$date] = true;
}
}
?>
我会这样做
<?php
$file = <<<EOF
randomString-data1
randomString-data2
randomString-data4
randomString-data2
randomString-data2
randomString-data3
randomString-data4
EOF;
$found = [];
foreach (explode("\n", $file) as $line) {
list(, $date) = explode('-', $line);
if (!isset($found[$date])) {
echo "$line<br>";
$found[$date] = true;
}
}
?>
Explode and check我在问题中提到过,Explode and check是我唯一能想到的。如果可能的话,我想要一个更好的方法。因为文件很大。好吧,不用暴力比较,你可以先对它进行排序,所以你只需要将每个条目与相邻条目进行比较。或者使用一些您可以在中了解的预定义函数?然而,问题是,如果随机字符串一开始并不重要,那么为什么前面会有随机字符串?我会爆炸,但随后将值分配到一个新数组,将“数据”部分设置为索引,将随机字符串设置为值。这将自动防止添加重复项。这意味着您将只保留“data randomstring”组合的最后一个值,不确定这是否适用于您。如果randomstring
包含连字符怎么办?分解和检查我在问题中提到过,分解和检查是我唯一能想到的。如果可能的话,我想要一个更好的方法。因为文件很大。好吧,不用暴力比较,你可以先对它进行排序,所以你只需要将每个条目与相邻条目进行比较。或者使用一些您可以在中了解的预定义函数?然而,问题是,如果随机字符串一开始并不重要,那么为什么前面会有随机字符串?我会爆炸,但随后将值分配到一个新数组,将“数据”部分设置为索引,将随机字符串设置为值。这将自动防止添加重复项。这意味着您将只保留“data randomstring”组合的最后一个值,不确定该组合是否适合您。如果randomstring
包含连字符怎么办?是的。这就是我在评论中的意思。我本来想加上这个作为答案,但你已经调整了你的答案。这就是我在评论中的意思。我本来想加上这个作为答案,但你已经调整了你的答案。