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

String replace by comparing associative array index in php

我的数组是

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

只是循环到数组,然后使用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;

字符串替换原生支持数组

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

然后它只是将 "search" 数组中的位置与 "replace" 数组中的位置进行字符串替换和 wha la.

干杯。