首页 > 解决方案 > 将 Tcl 字典转换为 JSON 或 ARRAY 的 PHP 解析器转换器

问题描述

经过很长时间的研究,没有找到解决方案。所以stackoverflow是我最后的希望。

在 PHP 中,我需要一个解析器来从 postgreSQL DB 获取数据。

字符串构造如下:

"keytext {this is my value text 1} key with multi words {value text 2} another key {key_value number 3}"

所以我们有键(可以由几个单词组成)和花括号中的值。

我认为,这种数据类型来自 TCL。

我们如何在 PHP 7/8 中将此字符串转换为 JSON 字符串或数组?

非常感谢你试图帮助我!

更新:

哦,天哪,我发现了第二个条件,这使得将 TCL dict 转换为 JSON 格式变得更加复杂:

user_receiver {all} manifest 3200 transferCode {B45}  time hours 0 status {1a} local {} is online {}

如您所见,字符串中有数字值,它们不包含在花括号中。

-> 字符串值在花括号中

-> 数值不是

那么,有谁知道,如何使用 REGEX 来获取键值对?

标签: phpregexdictionaryparsingtcl

解决方案


看一下这个

$str = "keytext {this is my value text 1} key with multi words {value text 2} another key {key_value number 3}";
$chars = str_split($str);

$result_arr = [];
$make_arr_key = true;
$make_arr_key_val = false;
$arr_key = '';
$arr_key_val = '';
foreach ($chars as $char) {
    if($char == '{') {
        $make_arr_key = false;
        $arr_key_val = '';
        $make_arr_key_val = true;
    }

    if($char == '}') {
        $result_arr[trim($arr_key)] = trim($arr_key_val);
        $arr_key = '';
        $make_arr_key = true;
        $make_arr_key_val = false;
    }

    if($make_arr_key) {
        if($char != '}'){
            $arr_key .= $char;
        }
    }

    if($make_arr_key_val) {
        if($char != '{') {
            $arr_key_val .= $char;
        }
    }

}
print_r($result_arr);

输出:

在此处输入图像描述


推荐阅读