需要一个解决方案来比较4个PHP数组并获得最终匹配字符串

时间:2016-06-15 23:48:21

标签: php text

作为项目的一部分,我的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()函数来匹配数组的每个元素以找到最终匹配并且输出相同。所以,我认为问题不在于代码,而在于解决方案。如果有人能告诉我更好的解决方法,我会很乐于助人。感谢

1 个答案:

答案 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个或更多数组。