作为项目的一部分,我的PHP代码比较了四个文本文件,并将输出用于下一步工作。文本文件包含仅以换行符分隔的电话号码。
我使用file()函数在数组中获取文本文件数据,然后使用array_intersect()函数来匹配数组中的数据。但输出似乎与数据匹配不正确。
//$files_for_matching is an array holding four file names
$matches1 = array_intersect(file($files_for_matching[0]), file($files_for_matching[1]));
$matches2 = array_intersect(file($files_for_matching[2]), file($files_for_matching[3]));
$final_matches = array_intersect($matches1, $matches2);
如果我测试了textfile01包含的四个虚拟文本文件(7,3,6,2,13,10,5),textfile02包含(1,3,9,5,7,10),textfile03包含( 1,3,199,5,27,10),textfile04中包含(11,23,1,5,3,10)个数字。
var_dump($matches1);
var_dump($matches2);
var_dump($final_matches);
所示:
array (size=2)
0 => string '7
' (length=3)
1 => string '3
' (length=3)
array (size=4)
0 => string '1
' (length=3)
1 => string '3
' (length=3)
3 => string '5
' (length=3)
5 => string '10' (length=2)
array (size=1)
1 => string '3
' (length=3)
因此,作为最终输出,它显示3作为四个文本文件中唯一的最终匹配数据,而这是不正确的。我尝试使用foreach循环遍历数组和preg_match()函数来匹配数组的每个元素以找到最终匹配并且输出相同。所以,我认为问题不在于代码,而在于解决方案。如果有人能告诉我更好的解决方法,我会很乐于助人。感谢
答案 0 :(得分:0)
根据您所写的内容,您的原始代码应该有效。
你可以试试这个:
$files_for_matching = [
[7, 3, 6, 2, 13, 10, 5],
[1, 3, 9, 5, 7, 10],
[1, 3, 199, 5, 27, 10],
[11, 23, 1, 5, 3, 10]
// you can add more files
];
// $final_matches = array_intersect($files_for_matching[0], $files_for_matching[1], $files_for_matching[2], $files_for_matching[3]);
// better: applying array_intersect() on an unknown number of arrays
$final_matches = call_user_func_array('array_intersect', $files_for_matching);
print_r($final_matches); // [3, 10, 5]
旁注:array_intersect()可以使用2个或更多数组。