在php中找到3个文本文件中的重复值

时间:2016-04-05 18:33:40

标签: php arrays

我有3个文本文件,请参阅以下

result1.txt
===========
782
778
719

result2.txt
============
130
129
719

result3.txt
============
718
719
585
520

我想在php中使用表单上传这些文件,之后我想检查所有文件中有多少重复值,记住重复意味着所有3个文件的公共值都是重复的,例如719包含在所有文件中 我尝试使用数组,但它不使用3数组 我使用array_intersect($array1,$array2,$array3);但它不起作用。 任何人都可以帮助我吗?

这是我的代码

$a = file('result1.txt');
$b = file('result2.txt');
$c = file('result3.txt');

foreach($a as $key => $value)
{
$a[$key] = $value;
}

foreach($b as $key => $value)
{
$b[$key] = $value;
}

foreach($c as $key => $value)
{ 
$c[$key] = $value;
}
$result=array_intersect($a,$b,$c);
print_r($result);
foreach(array_intersect($a, $b, $c) as $x) { echo $x; }

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

$hash = array();

// for each input file
$file = new SplFileObject("input_file_name");
$file->setFlags(SplFileObject::DROP_NEW_LINE | SplFileObject::SKIP_EMPTY);
while (!$file->eof()) {
    $num = (int) $file->fgets();
    if (!array_key_exists($num, $hash)) {
        $hash[$num] = 1;
    } else {
        $hash[$num] += 1;
    }
}
$file = null;

// now we get only the entries with a count of 3
$triples = array_filter($hash, function ($val) { return $val == 3; });
$results = array_keys($triples);

最后,$results将包含结果集中出现3次的值。

答案 1 :(得分:0)

my_string = "SELECT * FROM users WHERE first_name = 'first name value'" my_string2 = "SELECT * FROM users WHERE first_name = 'first\"s name value'" my_string3 = "SELECT * FROM users WHERE first_name = 'first\\'s name value'" rx = /first_name = (['"])((?:(?!\1)[^\\])*(?:\\.(?:(?!\1)[^\\])*)*)\1/i puts rx.match my_string # => first_name = 'first name value' puts rx.match(my_string)[2] # => first name value puts rx.match my_string2 # => first_name = 'first"s name value' puts rx.match(my_string2)[2] # => first"s name value puts rx.match my_string3 # => first_name = 'first\'s name value' puts rx.match(my_string3)[2] # => first\'s name value 使用以下方法正常工作:

array_intersect()

将文件插入数组可以通过以下方式完成:

<?php
$array1 = [782,778,719];
$array2 = [130,129,719];
$array3 = [718,719,585,520];

$dupes = array_intersect($array1,$array2,$array3);

echo '<pre>',print_r($dupes),'</pre>';