首页 > 解决方案 > 如何确定与其大部分内容不同的数组值?

问题描述

我有大量的 yaml 文件,我需要确定它们中的任何一个是否具有与集合的其余部分不同的键值对。

可能有多个文件具有各自不同的内容,多个文件以相同的方式不同,或者它们都可能相同。

我需要为所有相同的文件创建一个文件,并将不同的文件保持原样。

我目前将文件转换为关联数组中的字符串,并将它们的相对路径作为其键。(使用 file_get_contents)

但是,我想不出有效确定这一点的解决方案。任何帮助都会很高兴地接受

我之前尝试比较文件大小,然后执行 fopen + fread 遍历每一行并将其与同一集合中另一个 foreach 中的另一个文件进行比较。

然而,这被证明是有问题的,因为我无法轻易确定哪个文件与集合的其余部分不同,只有与它进行比较的那个文件不同。

因此,我现在尝试使用 file_get_contents 并将值放入数组中。我尝试了 array_unique,然后尝试了 array diff,但是如果两个文件与集合的其余部分不同但相同,这将不起作用。

我还使用它来摆脱整个集合中相同的文件内容,所以我只会有一组具有不同内容的文件?

有任何想法吗?我是不是想多了?发布了一些示例/测试代码

谢谢

//array is associative and holds $filepath => $fileStringContent                 
$arrayUniques = (array_unique($array));               

$arrayDiff = (array_diff_assoc($array, $arrayUniques));

foreach($arrayDiff as $key=>$value){
  //MULTIPLE WILL NOT WORK
  $original = array_search($value, $arrayUniques);
  unset($arrayUniques[$original]);
}

foreach($arrayUniques as $key=>$value){
  $pieces = explode("/", $key); 
  copy($key, './output/'.$pieces[5]);
}

标签: phparrays

解决方案


推荐阅读