我的数组是
Array
(
[#A] => 12 > 5
[#B] => 4 > 3
)
我想替换表达式
((#A) OR (#B) AND (#A))
匹配数组的键。所以我期待结果为
((12 > 5) OR (4 > 3) AND (12 > 5))
目前我无法实现它。提前谢谢。
考虑我的代码段落
$this->logger->debug($datauser); // [ZN1961] => Array([#A] => 12 > 5 [#B] => 4 > 3 ), [ZN1962] => Array ([#A] => 20 > 5 [#B] => 20 > 3 )
logicexpression = ((#A) OR (#B) AND (#A));
$newArr = array();
foreach ($datauser as $key => $value) {
foreach ($value as $logname => $cond) {
if(array_key_exists($logname,$value)){
$newArr[$key] =str_replace($logname, $cond, $logicexpression);;
}
}
}
$this->logger->debug($newArr); // here I am always getting ((12 > 5) OR (4 > 3) AND (12 > 5))`
答案 0 :(得分:3)
字符串替换本身支持数组
$array = [ '#A' => '12 > 5', '#B' => '4 > 3' ];
$string = '((#A) OR (#B) AND (#A))';
$string = str_replace(array_keys($array), $array, $string);
因此,使用数组键,我们可以删除中间人。
在线测试
当然,数组键只会为您提供一个以键为值的数组。所以在这种情况下
$array = [ 0 => '#A', 1 => '#B'];
然后它只匹配"搜索"中的位置。数组到"替换"数组用字符串替换和wha la。
欢呼声。
答案 1 :(得分:2)
只需循环到数组,然后使用str_replace()
$array = [ '#A' => '12 > 5', '#B' => '4 > 3' ];
$string = '((#A) OR (#B) AND (#A))';
foreach ($array as $key => $value) {
$string = str_replace($key, $value, $string);
}
echo $string;