繁体   English   中英

用PHP合并文件

[英]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;
}

看看这个-> http://br1.php.net/MultipleIterator

该算法效率很低。 尝试那样做

$ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM