通过比较php中的关联数组索引来替换字符串

时间:2018-04-17 05:15:12

标签: php associative-array string-matching

我的数组是

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))`

2 个答案:

答案 0 :(得分:3)

字符串替换本身支持数组

$array  = [ '#A' => '12 > 5', '#B' => '4 > 3' ];
$string = '((#A) OR (#B) AND (#A))';

$string = str_replace(array_keys($array), $array, $string);

因此,使用数组键,我们可以删除中间人。

在线测试

https://3v4l.org/dEMQ6

当然,数组键只会为您提供一个以键为值的数组。所以在这种情况下

$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;