以下是我正在使用的PHP代码
$file_handle = fopen("products.csv", "r");
$fname = "products.csv";
$fhandle = fopen($fname,"r");
$content = fread($fhandle,filesize($fname));
$server = "**\******,1433";
$connectionInfo = array( "Database"=>"******", "UID"=>"***", "PWD"=>"*******" );
$conn = sqlsrv_connect( $server, $connectionInfo );
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
$itemco = $line_of_text[0];
$sql = "SELECT quantity FROM Item WHERE itemlookupcode = '$itemco' ";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
die( print_r( sqlsrv_errors(), true) );
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$icc = $row['quantity'];
$content = str_replace("$line_of_text[1]", "$icc", "$content");
}
}
$fhandle = fopen($fname,"w");
fwrite($fhandle,$content);
fclose($fhandle);
str_replace
不在以下情况中工作:
$content = str_replace("$line_of_text[1]", "$icc", "$content");
答案 0 :(得分:4)
删除变量周围的引号。
$content = str_replace("$line_of_text[1]", "$icc", "$content");
应该是
$content = str_replace($line_of_text[1], $icc, $content);
//str_replace ( search, replace, subject ) This is how it works.
接下来,
使用与while循环相对应的代码
$count=1;
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$icc = $row['quantity'];
$content = str_replace($line_of_text[$count++], $icc, $content);
}
答案 1 :(得分:4)
首先,您打开相同的文件三次,只关闭一次。这不是一个主要问题,但你应该养成完成/关闭你开始的习惯的习惯。您可以使用fopen
file_get_contents
$content = file_get_contents("products.csv");
现在,str_replace
将替换每个出现的字符串。例如,如果$line_of_text[1]
是" 11"并且$icc
是" 9",文件中的其他值,例如" 110"将受到影响,从而使每个循环的其余替换变得越来越不可靠。
如果我没有弄错,你想要做的就是更换每一行中的一个单元格,这里有一个建议:
创建一个空变量,让我们说$new_content
现在,改变你的循环:
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$line_of_text[1] = $row['quantity']; // change cell value
$new_content .= implode(',', $line_of_text).','; // convert into string with extra
// ',' to avoid merging cells
}
$new_content = trim($new_content, ','); // remove extra ','
答案 2 :(得分:1)
没有调试输出数据..我只能给出一些建议..
答案 3 :(得分:1)
我不确定我理解,但str_replace
没有理由不起作用。
这可能只是一个推理问题
它根本不起作用或仅在某些情况下起作用?
如果是在某些情况下,可能是因为替换值不再存在
例如:
$content = "1234";
echo "$content\n"; // echo "1234"
$content = str_replace("1", "a", "$content");
echo "$content\n"; // echo "a1234"
$content = str_replace("2", "b", "$content");
echo "$content\n"; // echo "ab34"
$content = str_replace("1", "c", "$content");
echo "$content\n"; // echo "ab34" => no change because '1' is not existe -> already replace
我不知道这是不是你的问题,但可以解释一下。
你可能应该这样做:
$pos1 = stripos("$content", "$line_of_text[1]");
if ($pos1 !== false)
$content = str_replace("$line_of_text[1]", "$icc", "$content");
else
echo "$line_of_text[1] not found in $content \n";
否则,我同意其他人的说法,双引号是可选的。 :)
祝你好运。
答案 4 :(得分:1)
$ content = str_replace(“$ line_of_text [1]”,“$ icc”,“$ content”);
这应该替换为
$ content = str_replace($ line_of_text [1],$ icc,$ content);
因为这些是php变量并且将它们放在双引号或单引号中是不正确的,因为它们将被视为普通文本而str_replace将尝试将“$ line_of_text [1]”替换为“$ content”中的“$ icc”