str_replace在foreach循环php中

时间:2018-04-04 06:45:32

标签: php arrays str-replace

我想在迭代模式中替换几个字符串。

foreach (self::model()->findAll($q) as $ruleSet) {
$stringSet =$ruleSet->logic;   // It gives as "1 AND 2"
$dataset = array ();            

foreach (CampaignAutoLogic::model()->findAll($q) as $rule) {
    $operator = $rule->operator;
    $value = $rule->value;

    $condition = sprintf(5, $operator , $value);  // 5>3 (firs_iter), 5<0

    $w= str_replace($rule->id, $condition, $stringSet);  // $rule->id first loop gives the value as 1 , second loop the value is 2 
    $stringSet=$w;                  

                }                       

            }
$this->logger->debug($stringSet);

如果我执行上面的代码它没有给出(5> 3 AND 5&lt; 0)。我知道我必须取出所有$条件并立即替换$ stringSet。但不知道该怎么做。帮助我

1 个答案:

答案 0 :(得分:1)

问题是您的sprintf()需要格式参数来说明如何呈现数据。因此,如果您将该行更改为...

$condition = sprintf("%d%s%d", 5, $operator , $value);  // 5>3 (firs_iter), 5<0

这表示将字符串作为数字输出一个字符串和另一个数字。你应该得到你的输出。

还有另外一个问题,如果你的条件是逻辑=“1和2”,规则“5&gt; 2(first_iter),5&lt; 0”,当你来替换第二个规则时,你会得到“5&gt; 5&lt; 0和5&lt; 0“,因为它已经替换了第一个规则中的数字2以及主逻辑中的2个。

你可能最好拥有(例如)“#1 AND#2”的逻辑,然后你的替换成为......

$w= str_replace("#".$rule->id, $condition, $stringSet);  // $rule->id first loop gives the value as #1 , second loop the value is #2