我试图为我的web项目制作一个翻译模块,但我遇到了障碍。我编写了两个函数,一个用于导入CSV数据,另一个用于更改、删除和添加新数据到CSV文件。
除了添加部分之外,所有的功能都很出色。它会将数据添加到CSV文件中,但是当我想通过PHP将其导入网站时,它不会显示添加的值。(它看到它们应该是值,但返回的结果为空)我用来读取csv文件的函数是:
// Load in CSV (File name, delimiter, Fixed array[key,value] (optional))
function load__CSV($filename='', $delimiter=';', $fixed = null){
if(!file_exists($filename) || !is_readable($filename)) {
return FALSE;
}
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 100000, $delimiter)) !== FALSE) {
if (!$header) {
$header = $row;
} else {
$data[] = array_combine($header, $row);
}
}
fclose($handle);
}
if($fixed != null) {
foreach($data as $entry){
$set_csv[$entry[''.$fixed[0].'']] = $entry[''.$fixed[1].''];
}
} else {
$set_csv = $data;
}
return $set_csv;
}我用来添加、编辑或删除CSV内容的函数是:
// Change csv
function update__csv($csv = 'csv/language.csv',$key = array(2,''),$values = array([3,''],[4,'']),$status = 'change') {
$input = fopen(BASE_URL.$csv, 'r');
$output = fopen(BASE_URL.'csv/temporary.csv', 'w');
while (false !== ($data = fgetcsv($input, 10000, ";"))) {
if ($data[$key[0]] == $key[1]) {
foreach ($values as $value) {
$data[$value[0]] = $value[1];
}
if ($status == 'change' || $status == 'new') {
fputcsv($output, $data, ";");
}
} else {
fputcsv($output, $data, ";");
}
}
if($status == 'new'){
fputcsv($output, $values, ";");
}
fclose( $input );
fclose( $output );
unlink(BASE_URL . $csv);
rename(BASE_URL . 'csv/temporary.csv', BASE_URL . $csv);
}如果我将新的值添加到CSV文件,然后在我的PC上打开CSV,并使用UTF-8编码将其再次安全(不更改任何内容)为CSV,那么它将按预期工作并加载正确的数据。如果我在Notepad++中打开CSV,我会看到手动添加的项目和php添加的项目之间的差异:

我尝试了其他编码方法,但这对我来说是新的,所以我想我做错了什么。提前感谢您对我的帮助!
发布于 2020-12-04 21:18:13
经过进一步的调试,我确实找到了答案。数组的一个值不包含字符串,但包含true或false语句。这意味着它没有以正确的方式将数据添加到CSV文件中。
我通过在将变量放入数组之前将strval()添加到每个变量来修复它。
https://stackoverflow.com/questions/65142317
复制相似问题