我是php的新手,我正在尝试编写一个读取CSV文件(file1.csv)的脚本,并将文件中的单词与html文件(file2.html)中的单词进行比较,如果是file2中的单词.html与file1.csv中的关键部分匹配它应该使用匹配的键值更改file2.html内容..
到目前为止我所做的是:$glossArray = array();
$file_handle = fopen("file1.csv", "r");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 10000,';');
$glossArray[$line_of_text[0]] = $line_of_text[1];
$counter++;
}
fclose($file_handle);
$file = file_get_contents("file2.html");
foreach($glossArray as $key => $value){
$results = str_replace($key," means ".$value ,$file);
}
echo $results;
我认为我的问题发生在我尝试迭代并更改值时...因为我看到的只是file2.html的内容不变
任何帮助将不胜感激
提前谢谢
纳德
P.S。我根据你的宝贵建议编辑了旧代码的旧代码..现在就像这样......但仍然无法正常工作。
更新:改变foreach:
$results = str_replace(array_keys($glossArray), "means ".array_values($glossArray), $file);
解决了问题..但是另一个问题出现了:现在每次替换字符串时都会在它之前添加“Array”这个词。
答案 0 :(得分:4)
是的,问题出在你的第二次预告中。它应该是这样的:
foreach($glossArray as $key => $value){
$results = str_replace($key,$value ,$file);
}
你忘了密钥,所以它用$ value替换$ glossArray中每个值的每个实例。祝你好运!
答案 1 :(得分:4)
每次都将整个$ glossArray传递给str_replace。您每次执行str_replace时也会传递初始文件内容,因此最多只能看到一个替换。我想你想改成这样的东西:
$results = $file;
foreach($glossArray as $index=>$value)
{
$results = str_replace($index,$value ,$results);
}
由于str_replace允许前两个参数的数组(正如另一个用户所提到的),你也可以做这样的事情而不是循环:
$results = str_replace(array_keys($glossArray), array_values($glossArray), $file);
答案 2 :(得分:3)
为什么要打开file2.html进行读写,然后抓取它的内容?
(顺便说一句 - 在严格锁定的系统上,这会出现严重错误)
foreach($glossArray as $value)
{
$results = str_replace($glossArray,$value ,$file);
我认为这应该是
foreach($glossArray as $old=>$new)
{
$results = str_replace($old, $new, $file);
虽然将词汇表中的对加载到2个单独编号的数组中效率要高得多,但只需调用str_replace一次。
答案 3 :(得分:1)
str_replace的第一个参数不应该是$glossArray
,因为它是一个数组而不是要替换的字符串。
我认为您的CSV文件包含“SEARCH; REPLACE”之类的内容?在这种情况下,您的foreach
应如下所示:foreach ($glossArray as $searchString => $value)
。
然后尝试
$file = str_replace($searchString, $value ,$file);
而不是
$results = str_replace($searchString, $value ,$file);
因为现在你在完成后一次又一次地覆盖$results
每个str_replace ... echo $文件。
BTW:$counter
在做什么?
答案 4 :(得分:0)
新问题的解决方案(这应该是它自己的问题,不是对现有问题的编辑)是array_values返回一个数组,当你用一个字符串连接一个数组时, php插入'Array'而不是值。
$results = str_replace(array_keys($glossArray), "means ".array_values($glossArray), $file);
不正确。你应该这样做:
$vals = array_values($glossArray);
foreach($vals as $k=>$v)$vals[$k] = 'means '.$v;
$results = str_replace(array_keys($glossArray), $vals, $file);
请注意,提取了glossArray的值,并且每个值都与您的字符串连接 - 如果您只是尝试将字符串与数组连接,您将得到一个字符串,而不是aray。