【问题标题】:String replace by comparing associative array index in php通过比较php中的关联数组索引来替换字符串
【发布时间】:2018-09-26 23:07:44
【问题描述】:

我的数组是

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

【问题讨论】:

    标签: php associative-array string-matching


    【解决方案1】:

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

    【讨论】:

    • PS,对不起,可以这么说,偷了你的风头,不过我给你一个提升....作为补偿。我也批准了你的编辑.. :-)
    【解决方案2】:

    字符串替换原生支持数组

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

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2021-03-18
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多