PHP“;str_replace";不';在某些情况下不能正常工作?

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"=>"***

下面是我正在使用的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\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]具有相同的值非常感谢