PHP“;str_replace";不';在某些情况下不能正常工作?
下面是我正在使用的php代码PHP“;str_replace";不';在某些情况下不能正常工作?,php,sql-server,csv,str-replace,Php,Sql Server,Csv,Str Replace,下面是我正在使用的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"=>"***
$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\u replace
在以下实例中不起作用:
$content = str_replace("$line_of_text[1]", "$icc", "$content");
删除变量周围的引号
$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]的$line_和$icc是否作为预期值输出
- sqlsrv_fetch_数组($stmt,sqlsrv_fetch_ASSOC)是否返回正确的值?(如果不是,它将不会做任何事情)
- 你的csv文件是如何构造的
file\u get\u contents
跳过其中一个fopen
:
$content = file_get_contents("products.csv");
现在,str\u replace
将替换字符串的每一次出现。例如,如果文本[1]的$line\u为“11”且$icc
为“9”,则文件中的其他值(如“110”)将受到影响,从而使未来的其余替换在每个循环中越来越不可靠
如果我没有弄错,并且您只想在每行中替换一个单元格,那么这里有一个建议:
创建一个空变量,比如说$new\u 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 ','
我不确定我是否理解,但没有理由认为str\u 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";
否则,我同意其他人的看法,双引号是可选的。:)
祝你好运。$content=str_replace(“$line_of_text[1]”,“$icc”,“$content”)
这应该被替换为
$content=str_replace($icc$content,文本[1]的第_行)
由于这些是php变量,将它们放在双引号或单引号中是不正确的,因为它们将被视为普通文本,str_replace将尝试将“$content”中的“$line_of_text[1]”替换为“$icc”。去掉str_replace()中变量名周围的引号。
@johncode是正确的,它使用了文字字符“$icc”和“$content”,谢谢,我以前试过,但它不起作用。你能再添加一些细节吗,3个2值的例子。文本$line\u、$icc和$content中的内容。str_replace需要进行替换,只要有可能,它就会进行替换。在这种情况下,引用将是不相关的;只有单引号保留了字面上的美元符号。但是,它们仍然不需要(也不应该)在那里。这个变量有什么?在您提供的代码中,我看到$line_of_text[1]未分配$line_of_text[1]是数字-数量。我无法完全理解您的问题,但请检查我的更新答案帮助。您似乎对代码中的逻辑有问题。检查$content
的内容,并尝试分别对待每一行。文本[1]的$line\u和$icc输出是否为预期值?对sqlsrv_fetch_数组($stmt,sqlsrv_fetch_ASSOC)是否返回正确的值?是的…您的csv文件是如何构造的?我不明白这是什么意思,唯一的问题是当行具有相同的$line\u的\u text[1]值时。。与第1行$line_of_text[1]=“1”类似,第2行$line_of_text[1]=“1”除此之外,它可以工作,但只有第1行$line_of_of_text[1]具有相同的值非常感谢