PHP |获取与字符串最相似的文件

PHP | Get file that is most similar to string

目前我有一个 zip 文件夹,里面有我不知道文件名的文件。我唯一知道的是一个文件名与一个字符串非常相似。字面上差了一个字符。

我现在想做的是只提取与我拥有的字符串最相似的文件。要从 zip 中仅提取一个文件,我使用以下有效代码:

$zip = new ZipArchive;
if ($zip->open('directory/to/zipfile') === TRUE) 
{
    $zip->extractTo('directory/where/to/extract', array('the/filename/that/is/most/similair/most/go/here'));
    $zip->close();
    echo 'ok';
} 
else 
{
    echo 'failed';
}

我知道要检查字符串的相似性,我可以使用以下代码:

$var_1 = 'PHP IS GREAT'; 
$var_2 = 'WITH MYSQL'; 

similar_text($var_1, $var_2, $percent); 

根据百分比,我可以判断哪个文件与我拥有的字符串最相似。我唯一担心的是 ZipArchieve 没有在不知道确切文件名的情况下从 zip 中检索文件的功能。

所以我想知道是否有一种方法可以根据与文件名最相似的字符串从 zip 文件中检索单个文件。

This comment in the docs 提到了如何列出 zip 存档中的文件,因此,您所要做的就是遍历所有文件名并找到与您拥有的字符串最匹配的文件名,然后解压缩它。

$search = 'Closefilename.doc';
$za = new ZipArchive(); 

$za->open('theZip.zip'); 
$similarity = 0;
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    similar_text($stat['name'], $search, $sim);
    if ($sim > $similarity) {
        $similarity = $sim;
        $filename = $stat['name'];
    }
}
// Now extract $filename;

试试这个代码:

// Your Zip File path
$zip = zip_open( $fileName ); 

if ( is_resource( $zip ) ) {
    while( $zip_entry = zip_read( $zip ) ) {
        $zip_entry_string = zip_entry_read ( $zip_entry );
        // Compare here with similar_text 
        // If success you can write this string to file
    }
}
zip_close( $zip );
?>