WordPress — объединить 2 строки в CSV-файл и создать новый CSV для хранения объединенных данных с PHP?

Добрый день. У меня есть CSV-файл с такой структурой

Id |    ArticleId  | LanguageId | Title             | Content
----------------------------------------------------------------------
1         2              1        Francais Title    Francais Content
2         2              2        English Title      English Content

Как я могу объединить статью с моим ожидаемым результатом?
Ожидайте (Примечание: [: fr] и [: en] являются шорткодами для q-translate wordpress, я просто должен определить это, чтобы я мог импортировать в базу данных)

ArticleId     | Title                       | Content
------------------------------------------------------------------
2       |  [:fr]Francais Title[:en]  |   [:fr]Francais Content
|   English Title            |    [:en]English Content

Мой текущий 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);
}
?>

0

Решение

Вот решение: сначала вы должны создать пустой массив, который будет содержать извлеченные данные. Затем вы перебираете строки 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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]