簡體   English   中英

PHP“str_replace”在某些情況下無法正常工作?

[英]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 ','

沒有調試輸出數據..我只能給出一些建議..

  • $ line_of_text [1]和$ icc輸出是否為預期值?
  • sqlsrv_fetch_array($ stmt,SQLSRV_FETCH_ASSOC)是否返回正確的值? (如果不是它將不會做任何事情)
  • 您的csv文件結構如何?

我不確定我理解,但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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM