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