1

我尝试将 2 个文本文件与由 分隔的数据进行比较-,在一种情况下,一个文件获取所有数据,在另一种情况下,只有具有相同 id 的更改数据在这种情况下,这个文件被称为db_tmp.txt

两个文件中的结构是这样的:

文件 txt(第一个是 id)db/text.txt

1a34-Mark Jhonson
1a56-Jhon Smith
1a78-Mary Walter

用于比较的文件,例如更改的数据,相同的 id 但不同的内容 - db_tmp.txt

1a56-Tom Tom

我创建了一个函数来比较两个文件以检测是否存在相同的 id 和更改:

<?php
$cron_file    = file("db_tmp.txt");
$cron_compare = file("db/test.txt");

function cron($file_temp, $file_target)
{    
    for ($fte = 0; $fte < sizeof($file_temp); $fte++) {
        $exp_id_tmp = explode("-", $file_temp[$fte]);
        $cr_temp[]  = "" . $exp_id_tmp[0] . "";
    }

    for ($ftt = 0; $ftt < sizeof($file_target); $ftt++) {
        $exp_id_targ = explode("-", $file_target[$ftt]);
        $cr_target[] = "" . $exp_id_targ[0] . "";
    }

    $diff = array_diff($cr_target, $cr_temp);

    $it = 0;
    foreach ($diff as $diff2 => $key) {
        echo $diff2;
        echo "--- $key";
        print "<br>";
    }   
}

cron($cron_file, $cron_compare);
?>

如果 tmp 中存在相同的 id,我必须检测另一个文件中的条目并更改为 tmp 的值,我尝试但无法使其工作,该功能有效但不适用于所有内容,如果有人可以帮助我,那将是完美的,因为我不知道如何继续并保存。

4

1 回答 1

0

如果您想根据 id 进行匹配,一个简单的 foreach 就足够了,然后只需在循环期间检查它们是否具有相同的键。考虑这个例子:

// sample data from file('db_text.txt');
$contents_from_text = array('1a34-Mark Jhonson','1a56-Jhon Smith', '1a87-Mary Walter');

// reformat
$text = array();
foreach($contents_from_text as $element) {
    list($key, $value) = explode('-', $element);
    $text[$key] = $value; 
}

$tmp = array();
// sample data from file('db_tmp.txt');
$contents_from_tmp = array('1a56-Tom Tom', '1a32-Magic Johnson', '1a23-Michael Jordan', '1a34-Larry Bird');
foreach($contents_from_tmp as $element) {
    list($key, $value) = explode('-', $element);
    $tmp[$key] = $value; 
}

// compare
foreach($tmp as $key => $value) {
    foreach($text as $index => $element) {
        if($key == $index) {
            $tmp[$key] = $element;
        }
    }
}

$contents_from_tmp = $tmp;
print_r($contents_from_tmp);

样本输出

于 2014-05-31T11:55:11.217 回答