[英]PHP “str_replace” doesn't work properly in some case?
以下是我正在使用的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");
刪除變量周圍的引號。
$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);
}
首先,您打開相同的文件三次,只關閉一次。 這不是一個主要問題,但你應該養成完成/關閉你開始的習慣的習慣。 您可以使用file_get_contents
跳過其中一個fopen
:
$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 ','
沒有調試輸出數據..我只能給出一些建議..
我不確定我理解,但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";
否則,我同意其他人,雙引號是可選的。 :)
祝好運。
$ 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”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.