[英]Merging files with php
所以,我有两个文件在第一个文件中,有text:hash
在另一个文件中有hash:pass
我写了一些代码来匹配哈希,然后打印文本(因此,运行时,我会得到text:pass的输出),它工作正常,可以找到所有信息,但是有时它会跳过某些信息而只是找不到任何东西。 (如果我手动进行操作,数据就在那里)所以我不确定为什么会找到大多数数据,但不是全部。 无论如何,我希望有人可以提供帮助,代码如下:
<?php
$emailhash = file('emailhash.txt');
$hashpass = file('hashpass.txt');
$list = '';
foreach($emailhash as $data) {
$data = str_replace("\r\n",'', $data);
$array_emailhash = explode(":", $data);
$email = $array_emailhash[0];
$hash = $array_emailhash[1];
foreach($hashpass as $data2) {
$data2 = str_replace("\r\n",'', $data2);
$array_hashpass = explode(":", $data2);
$hash2 = $array_hashpass[0];
$pass = $array_hashpass[1];
if($hash2 == $hash)
$list .= $email.':'.$pass."\r\n";
}
}
file_put_contents('emailpass.txt', $list);
您需要迭代迭代器,例如使用multipleIterator
,因为您将整个文件读入一个数组,因此请执行以下操作。
$iterator = new MultipleIterator();
$iterator->attachIterator( new ArrayIterator( $emailhash ));
$iterator->attachIterator( new ArrayIterator( $hashpass ));
foreach( $iterator as $value ) {
list($keys1, $keys2) = $iterator->key();
list($value1, $value2) = $value;
}
该算法效率很低。 尝试那样做
$ emailhash = file('emailhash.txt'); $ hashpass = file('hashpass.txt'); $ hashToEmail = array(); $ list ='';
foreach($emailhash as $data) {
$data = str_replace("\r\n",'', $data);
$array_emailhash = explode(":", $data);
$email = $array_emailhash[0];
$hash = $array_emailhash[1];
$hashToEmail[$hash] = $email;
}
foreach($hashpass as $data2) {
$data2 = str_replace("\r\n",'', $data2);
$array_hashpass = explode(":", $data2);
$hash2 = $array_hashpass[0];
$pass = $array_hashpass[1];
if (array_key_exists($hash2, $hashToEmail)) {
$list .= $hashToEmail[$hash2].':'.$pass."\r\n";
} else {
//what to do if you don't have that password hash
}
}
您的设计的Big O复杂度为n ^ 2 [对于1000行,将需要1 000 000次迭代]没有嵌套foreach的复杂度为2n。 [将需要2000次迭代]。 尝试找到一个解决方案:)
无论如何,在两个地方都存在问题,因为您可能会遇到哈希冲突(对于两个不同的电子邮件,您可以具有相同的哈希,然后对于所有电子邮件,您将打印出相同的密码(可能是错误的密码)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.