簡體   English   中英

PHP用變量替換字符串內的字符

[英]PHP Replacing Character Inside String With Variable

簡而言之,我正在嘗試替換所有的“?” 值包含在變量中,它將不起作用。 請幫忙。

    $string = "? are red ? are blue";
    $count = 1;

    update_query($string, array($v = 'violets', $r = 'roses'));


    function update_query($string, $values){

        foreach ( $values as $val ){

            str_replace('?', $val, $string, $count);    
        }

        echo $string;
    }

我得到的輸出是: 是紅色的 ? 是藍色的

由於人們不注意而感到沮喪,我不得不正確地回答這個問題。

str_replace將替換搜索字符串的所有實例。 因此,在violets之后,就沒有什么可以代替的roses了。

可悲的是, str_replace沒有限制參數,但是preg_replace卻沒有。 但是實際上,您可以使用preg_replace_callback更好地做到,就像這樣:

function update_query($string, $values){
    $result = preg_replace_callback('/\?/', function($_) use (&$values) {
        return array_shift($values);
    }, $string);
    echo $string;
}

您忘記將其設置為等於變量。

$string = str_replace('?', $val, $string, $count); 

您可能想在新字符串中捕獲來自str_replace的返回值,並在每次替換時回顯它,並按引用傳遞$ count。

   foreach ( $values as $val ){

        $newString = str_replace('?', $val, $string, &$count);    
        echo $newString;
   }

這是最好,最干凈的方法

  <?php

  $string = "? are red ? are blue";
  $string = str_replace('?','%s', $string);
  $data = array('violets','roses');

  $string = vsprintf($string, $data);  

  echo $string;

您的代碼已編輯

$string = "? are red ? are blue";

update_query($string, array('violets','roses'));


function update_query($string, $values){

  $string = str_replace('?','%s', $string);
  $string = vsprintf($string, $values);

    echo $string;
}

好的,這里是一些好帖子的綜合解決方案。

$string = "? are red ? are blue";

update_query($string, array($v = 'violets', $r = 'roses'));

function update_query($string, $values){

    foreach ( $values as $val ){

        $string = preg_replace('/\?/', $val, $string, 1);

    }

    echo $string;
}

如前所述, preg_replace將允許限制要更新的匹配項的數量。 謝謝你們。

您可以通過兩種方式解決此問題:

1)將問號替換為其各自的值。 有一百種方法可以解決這個問題,但是對於這樣的事情,我寧願只用老式的方法來解決:找到問號,然后用新的值一一替換。 如果$arr的值本身包含問號,則將忽略它們。

function update_query($str, array $arr) {
    $offset = 0;
    foreach ($arr as $newVal) {
        $mark = strpos($str, '?', $offset);
        if ($mark !== false) {
            $str = substr($str, 0, $mark).$newVal.substr($str, $mark+1);
            $offset = $mark + (strlen($newVal) - 1);
        }
    }
    return $str;
}
$string = "? are red ? are blue";
$vars = array('violets', 'roses');
echo update_query($string, $vars);

2)或者,您可以自己輕松使用唯一標識符。 這使您的代碼更易於理解,並且更具可預測性和魯棒性。

function update_query($str, array $arr) {
    return strtr($str, $arr);
}
echo update_query(':flower1 are red :flower2 are blue', array(
    ':flower1' => 'violets',
    ':flower2' => 'roses',
));

您甚至可以只使用strtr() ,但是將其包裝在一個可以更容易記住的函數中(這在您的代碼中很有意義)也將起作用。

哦, 如果您打算使用它來創建SQL查詢,則應該重新考慮。 請改用數據庫驅動程序的預處理語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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