【问题标题】:Converting string containing multidimensional array keys and values PHP转换包含多维数组键和值的字符串 PHP
【发布时间】:2023-03-09 08:52:02
【问题描述】:

我使用 TPP API 检查域可用性和域注册,但我在 string 收到响应。

  1. 获取Session,返回字符串OK: t73484678463765

  2. 域检查,返回字符串woohoo123.nz: OK: Minimum=1&Maximum=2

  3. 其他情况,返回字符串woohoo123.nz: ERR: 102, This is message

当它返回 OK 时,它在孩子中具有 &,但是当 ERR 时,它具有 ,

我想将返回的string 转换为array

如输入woohoo123.nz: OK: Minimum=1&Maximum=2后输出array

 [
     'woohoo123.nz' => [
         'OK' => [
             'Minimum' => 1,
             'Maximum' => 2,
         ]
     ]
 ]

输入woohoo123.nz: ERR: 102, This is message,输出array

 [
     'woohoo123.nz' => [
         'ERR' => [
             'code' => 102,
             'message' => 'This is message',
         ]
     ]
 ]

我更喜欢重用代码,我更喜欢 recursivecallback 但在这种情况下不确定。

【问题讨论】:

  • 我不确定你想要什么。您能否提供更多可能的字符串输入示例和您想要的array/stdClass 输出?
  • 我想把这些字符串转换成数组。字符串包括:&,并转换成多维数组@HurricaneDevelopment
  • 我重写了函数。它几乎仅适用于这种特定情况。让我知道它是否适合您。

标签: php arrays regex stdclass recursive-backtracking


【解决方案1】:

不是 100% 确定这是否是您要查找的内容。它适用于您的示例,但只有在输入字符串严格遵循该格式时才会继续工作。

    function stringToArray($inputStr) {
    $array = [];

    $topComponents = explode(': ',$inputStr);
    $parametersStr = $topComponents[count($topComponents) -1];
    if (strpos($parametersStr,'&') !== FALSE) {
        $tmpArr = explode('&',$parametersStr);
        foreach ($tmpArr as $val) {
            $comp = explode('=',$val);
            $array[$comp[0]] = $comp[1];
        }
    } else if ($topComponents[count($topComponents) - 2] === "ERR") {
        $tmpArray = explode('ERR: ',$parametersStr);
        $tmpArray = explode(', ',$tmpArray[0]);
        $array = [
            "code" => intval($tmpArray[0]),
            "message" => $tmpArray[1]
        ];
    } else {
        $array = $parametersStr;
    }

    for ($i=count($topComponents) -2; $i >= 0; $i--) {
        $newArray = [];
        $newArray[$topComponents[$i]] = $array;
        $array = $newArray;
    }

    return $array;
}

print_r(stringToArray("OK: t73484678463765"));

【讨论】:

  • 这就是我想要的。感谢您的宝贵时间!
猜你喜欢
  • 2016-02-09
  • 2014-12-25
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多