PHP将字符串中多个相同字符串替换为不同字段串

1.应用场景

将json字符串相同key替换为不用key. 转换为数组/对象时,避免元素覆盖

2.环境介绍

语言: php7.0

3.实现思路与代码

思路: 逐个匹配,逐个替换 //效率上, 有待确认,提高

方式: php替换函数, 正则表达式

 

$test = '{"":{"test":""}, "":{"test":""}, "":"test"}';
//字符串替换 只好使用正则进行匹配

$test = str_replace("\"\":{", "\"_empty_\":{", $test, $count);

//这里可使用单引号: $test = str_replace('"":{', '"_empty_":{', $test, $count);


for($i=1; $i<=$count; $i++){
    $test = preg_replace("/_empty_/", "_empty$i", $test, 1); 

    //$test = preg_replace('/_empty_/', "_empty$i", $test, 1);
}

var_dump($test);


$test = json_decode($test, 1);
var_dump($test);
exit;

 

code:

/**
 * iniJson字段串替换 
 * 这里可以将 _empty_ 提取到方法参数位置,从而实现替换字符串的自定义,这里暂时不改
 */
public function jsonReplace($json){
    $json = str_replace('"":{', '"_empty_":{', $json, $count);
    for($i=1; $i<=$count; $i++){
        $json = preg_replace('/_empyt_/', '_empty'.$i, $json, 1);
    }
    return $json;
}

//功能升级, 这里并没有使用正则去做替换,因为个人认为php内置函数性能方面还是要优于正则匹配,除非功能上无法实现,建议还是不要使用正则/

 

class Device_fit_tool extends Model
{

    protected $tableName = 'device_fit_tool';
    protected $searchStr = ['"":{', '"" :{', '"" : {', '"": {'];
    protected $tmpReplaceStr = '__empty__';
    protected $finalReplaceStr = '__empty_';
    public $data = '';
    public $data1 = '';

    public function __construct()
    {
        $filePath = 'D:\\iniJson.json';
        $filePath1 = 'D:\\iniJsonToMiddleJson.json';
        if (file_exists($filePath)) {
            $this->data = file_get_contents($filePath);
        }
        if (file_exists($filePath1)) {
            $this->data1 = file_get_contents($filePath1);
        }
    }
 

 

public function jsonEmptyKeyReplace($json){//iniJson字段串替换空字符串key,避免转换为数组时被覆盖
        //方式一  可以看到,str_replace()函数可以的查找字符串可以为数组形式,替换参数认为字符串,
        //更多用法见:php参考手:php手册->函数参考->文本处理->字符串->字符串函数->str_replace;
        $json = str_replace($this->searchStr,  "\"$this->tmpReplaceStr\":{", $json, $count);

//        //方式二
//        $sum = 0;
//        foreach($this->searchStr as $pattern){
//            $json = str_replace($pattern,  "\"$this->tmpReplaceStr\":{", $json, $count);
//            $sum += $count;
//        }

        for($i=1; $i<=$count; $i++){
            $json = preg_replace("/$this->tmpReplaceStr/", ($this->finalReplaceStr).$i, $json, 1);
        }
        return [$json, $count];
    }

}

 

 

处理结果如下:

 

处理前:

PHP将字符串中多个相同字符串替换为不同字段串_第1张图片

 

处理后:

PHP将字符串中多个相同字符串替换为不同字段串_第2张图片

 

4.问题/补充

1. json字符串中,key, value均可以为空字符串, php数组, key也可以为空字符串

...

5.参考

TBD

后续补充

...

你可能感兴趣的:(PHP,字符串-STRING)