Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除随机启动的重复行_Php_Duplicates - Fatal编程技术网

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
包含连字符怎么办?是的。这就是我在评论中的意思。我本来想加上这个作为答案,但你已经调整了你的答案。这就是我在评论中的意思。我本来想加上这个作为答案,但你已经调整了你的答案。