Str_replace 在 foreach 循环中 php
Str_replace in foreach loop php
我想替换迭代模式中的几个字符串。
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<0)。我知道我必须取出所有 $condition 并立即替换 $stringSet。但是不知道该怎么做。帮帮我
问题是您的 sprintf()
需要一个格式参数来说明如何呈现数据。因此,如果您将该行更改为...
$condition = sprintf("%d%s%d", 5, $operator , $value); // 5>3 (firs_iter), 5<0
这表示将字符串输出为一个数字,一个字符串和另一个数字。你应该得到你之后的输出。
还有另外一个问题,如果你的条件是 logic="1 AND 2" 和规则 "5>2 (first_iter), 5<0",当你来替换第二条规则时您将得到“5>5<0 AND 5<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
我想替换迭代模式中的几个字符串。
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<0)。我知道我必须取出所有 $condition 并立即替换 $stringSet。但是不知道该怎么做。帮帮我
问题是您的 sprintf()
需要一个格式参数来说明如何呈现数据。因此,如果您将该行更改为...
$condition = sprintf("%d%s%d", 5, $operator , $value); // 5>3 (firs_iter), 5<0
这表示将字符串输出为一个数字,一个字符串和另一个数字。你应该得到你之后的输出。
还有另外一个问题,如果你的条件是 logic="1 AND 2" 和规则 "5>2 (first_iter), 5<0",当你来替换第二条规则时您将得到“5>5<0 AND 5<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