转换到PHP 8.1后出现CSV导入问题



我有以下在PHP7中工作的Wordpress函数。自从转换到8.1之后,它就不起作用了。

function dropdown_handler() {
$output = drop_function();
//send back text to replace shortcode in post
return $output;
}
function drop_function() {
//get the csv file with amounts
if ($file_handle = fopen("wp-content/plugins/drop/amounts.csv", "r")) {
while (!feof($file_handle) ) {
$lines[] = fgetcsv($file_handle, 1024);

}
fclose($file_handle);
$lines = str_replace ("£","£",$lines);
}
else {
echo "Sorry, something went wrong";
}

在我的错误日志中;PHP警告:"中的数组到字符串转换;与$lines=str_replace行有关,但我认为fopen语句有问题。

基本上,单词Array存储在$lines变量中,而不是CSV文件的内容中。有什么想法吗?

您的代码总是被破坏,只是以比过去更明显的方式被破坏了…

$lines[] = fgetcsv($file_handle, 1024);

fgetcsv,除非失败,否则返回一个数组;然后将此数组作为新项添加到另一个数组$lines中。结果是一个数组,如下所示:

$lines = [
['line 1 first item', 'line 1 second item'],
['line 2 first item', 'line 2 second item'],
];

稍后,将整个数组传递给str_replace;而CCD_ 5只知道如何处理数组的一维

所以这是有效的:

$singleLine = ['line 1 first item', 'line 1 second item'];
var_dump(str_replace('item', 'ITEM', $singleLine));

但事实并非如此:

var_dump(str_replace('item', 'ITEM', $lines));

在多个版本的PHP上运行该示例表明,在PHP7.x下,str_replace的反应只是简单地保持内部数组不变——换句话说,它什么也没做。

在PHP8中,它尝试将每个内部数组变成一个字符串,发出警告并生成单词";数组";(然后将对其应用任何替换(。

两个PHP版本的修复程序是在每个内部数组上运行str_replace,最简单的方法是使用array_map:

var_dump(
array_map(
fn($innerArray) => str_replace('item', 'ITEM', $innerArray),
$lines
)
);

或者,您可以完全删除str_replace行,因为当它实际上什么都没做时,您显然已经足够高兴了。

相关内容

  • 没有找到相关文章

最新更新