在csv文件中合并2行,并创建一个新的csv以使用PHP存储合并的数据?

在csv文件中合并2行,并创建一个新的csv以使用PHP存储合并的数据?,php,wordpress,export-to-csv,qtranslate,Php,Wordpress,Export To Csv,Qtranslate,你好。我有一个像这样结构的csv文件 Id | ArticleId | LanguageId | Title | Content ---------------------------------------------------------------------- 1 2 1 Francais Title Francais Content 2 2 2

你好。我有一个像这样结构的csv文件

Id |    ArticleId  | LanguageId | Title             | Content
----------------------------------------------------------------------
1         2              1        Francais Title    Francais Content
2         2              2        English Title      English Content
如何将文章合并到预期结果? Expect(注意:[:fr]和[:en]是q-translate wordpress的短码,我只需要定义它,以便导入数据库)

生成文件中的当前php代码

<?php 
$row = 1;
if (($handle = fopen("dbo.ArticleTranslation.csv", "r")) !== FALSE) {
    $query = '';
    $flag = true;
    while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
        if($flag) { $flag = false; continue; }
        $num = count($data);

        $content = '';
        $title = '';

        if ($data[2] == '1') {
            $content .= '[:fr]' . $data[4];
            $title .= '[:fr]' . $data[3];

        } else {
            $title .= '[:en]' . $data[3];
            $content .= '[:en]' . $data[4];
        }
        //ie(var_dump($content));
        //var_dump($content);

       var_dump($data);

        $row++;
       // var_dump($mergeContent);
    }
    fclose($handle);
} 
?>

这里有一个解决方案:首先,您必须创建一个空数组,其中包含提取的数据。然后,在csv行上循环。对于每一行,提取文章数据。如果文章已经存在,只需将lang附加到数组中即可。如果不是,则将项目创建到结果数组中

if (($handle = fopen("dbo.ArticleTranslation.csv", "r")) !== false) {
    $extractedData = [];
    fgetcsv($handle, 2000, ","); // skip first line
    while (($line = fgetcsv($handle, 2000, ",")) !== false) {
        $articleId = $line[1];
        $lang = $line[2];
        $title = $line[3];
        $content = $line[4];

        // convert lang id to code
        if ($lang == 1) $lang = '[:fr]';
        if ($lang == 2) $lang = '[:en]';

        // build string with lang code
        $content = $lang.$content;
        $title = $lang.$title;

        // check if an article with this id was already extracted
        if (array_key_exists($articleId, $extractedData)) {
            // append lang to existing article
            $extractedData[$articleId]['Content'] .= $content;
            $extractedData[$articleId]['Title'] .= $title;
        } else {
            // add new article
            $extractedData[$articleId] = [
                'ArticleId' => $articleId,
                'Content' => $content,
                'Title' => $title
            ];
        }
    }
    fclose($handle);
}

到目前为止你试过什么了吗?我刚刚更新了代码。请看一看。如果有任何帮助,我将不胜感激。
if (($handle = fopen("dbo.ArticleTranslation.csv", "r")) !== false) {
    $extractedData = [];
    fgetcsv($handle, 2000, ","); // skip first line
    while (($line = fgetcsv($handle, 2000, ",")) !== false) {
        $articleId = $line[1];
        $lang = $line[2];
        $title = $line[3];
        $content = $line[4];

        // convert lang id to code
        if ($lang == 1) $lang = '[:fr]';
        if ($lang == 2) $lang = '[:en]';

        // build string with lang code
        $content = $lang.$content;
        $title = $lang.$title;

        // check if an article with this id was already extracted
        if (array_key_exists($articleId, $extractedData)) {
            // append lang to existing article
            $extractedData[$articleId]['Content'] .= $content;
            $extractedData[$articleId]['Title'] .= $title;
        } else {
            // add new article
            $extractedData[$articleId] = [
                'ArticleId' => $articleId,
                'Content' => $content,
                'Title' => $title
            ];
        }
    }
    fclose($handle);
}