我想在迭代模式中替换几个字符串。
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。但不知道该怎么做。帮助我
答案 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