Php 如何分解以下字符串

Php 如何分解以下字符串,php,Php,如何分解以下字符串 $str=“ProductId=123,Name=古老的根,现代的追求,国家=印度,城市=班加罗尔,价格=3368” 这样输出数组将包含 [ "ProductId" => "123", "Name" => "Ancient Roots, Modern Pursuits", "Country" => "India", "City" => "Bangalore", "Price" => "3368" ] 我

如何分解以下字符串

$str=“ProductId=123,Name=古老的根,现代的追求,国家=印度,城市=班加罗尔,价格=3368”

这样输出数组将包含

[
    "ProductId" => "123",
    "Name" => "Ancient Roots, Modern Pursuits",
    "Country" => "India",
    "City" => "Bangalore",
    "Price" => "3368" 
]
我试着用“逗号”来分解,然后每个元素又用“等于”来分解

再三

$prodarr = explode("=", $arr[0]);  
$product["ProductId"] = $prodarr[1]

但当价值观中存在另一个逗号时,比如“古老的根,现代的追求”这个名字,你的结构就很难打破。但您仍然可以尝试解析它

第一次在
=
上爆炸。您将拥有下一个键和当前值

然后循环这些并在
上分解,并选择下一个关键点的最后一个元素和所有前面的部分作为值():


您的结构非常脆弱,无法破坏。但您仍然可以尝试解析它

第一次在
=
上爆炸。您将拥有下一个键和当前值

然后循环这些并在
上分解,并选择下一个关键点的最后一个元素和所有前面的部分作为值():


试试这样的方法

<?php
    $str = "ProductId=123, Name=Ancient Roots, Modern Pursuits, Country=India, City=Bangalore, Price=3368";
    $str_arr = explode(",", $str);
    $json_array = array();

for ($i = 0; $i < sizeof($str_arr); $i++)
    {
    if (isset($str_arr[$i + 1]))
        {
        if (strpos($str_arr[$i + 1], '=') !== false)
            {
            $prod = explode("=", $str_arr[$i]);
            $json_array["" . $prod[0] . ""] = "" . $prod[1] . "";
            }
          else
            {
            $textAppend = "," . $str_arr[$i + 1];
            $prod = explode("=", $str_arr[$i]);
            $json_array["" . $prod[0] . ""] = "" . $prod[1] . "" . $textAppend . "";
            $i++;
            }
        }
      else
        {
        $prod = explode("=", $str_arr[$i]);
        $json_array["" . $prod[0] . ""] = "" . $prod[1] . "";
        }
    }


var_dump($json_array);
?>

试试这样的方法

<?php
    $str = "ProductId=123, Name=Ancient Roots, Modern Pursuits, Country=India, City=Bangalore, Price=3368";
    $str_arr = explode(",", $str);
    $json_array = array();

for ($i = 0; $i < sizeof($str_arr); $i++)
    {
    if (isset($str_arr[$i + 1]))
        {
        if (strpos($str_arr[$i + 1], '=') !== false)
            {
            $prod = explode("=", $str_arr[$i]);
            $json_array["" . $prod[0] . ""] = "" . $prod[1] . "";
            }
          else
            {
            $textAppend = "," . $str_arr[$i + 1];
            $prod = explode("=", $str_arr[$i]);
            $json_array["" . $prod[0] . ""] = "" . $prod[1] . "" . $textAppend . "";
            $i++;
            }
        }
      else
        {
        $prod = explode("=", $str_arr[$i]);
        $json_array["" . $prod[0] . ""] = "" . $prod[1] . "";
        }
    }


var_dump($json_array);
?>

我玩了一会儿。我使用preg_match_all()来提取模式,这些模式包含的字符是no,no=后跟a=后跟no=后跟a或行尾。结果如下:

$result = array();
preg_match_all('/([^=,]+=[^=]+)(,|$)/', $string, $matches);
foreach($matches[1] as $data){
 $data = explode('=', $data);
 $result[trim($data[0])] = trim($data[1]);
}
$result = json_encode($result);
结果是:

{"ProductId":"123","Name":"Ancient Roots, Modern Pursuits","Country":"India","City":"Bangalore"}

我玩了一会儿。我使用preg_match_all()来提取模式,这些模式包含的字符是no,no=后跟a=后跟no=后跟a或行尾。结果如下:

$result = array();
preg_match_all('/([^=,]+=[^=]+)(,|$)/', $string, $matches);
foreach($matches[1] as $data){
 $data = explode('=', $data);
 $result[trim($data[0])] = trim($data[1]);
}
$result = json_encode($result);
结果是:

{"ProductId":"123","Name":"Ancient Roots, Modern Pursuits","Country":"India","City":"Bangalore"}

你能控制这个字符串是如何创建的吗?有安全的规则可以遵循吗?例如,
=
之前的单词始终是一个没有逗号或空格的单词?另外,如果你能控制它,你能不能简单地切换到一个像JSON这样的已建立的格式?不,这是rest API的一个响应,因为逗号可能意味着很多事情,不要认为你能单独使用explode来实现这一点。你可以用一个具有前瞻性的正则表达式来完成它。。。直到下一个奇怪的数据格式击中你。如果您可以使用更好的数据格式,无论是带有分隔符的当前格式还是类似于JSON@Bharat您应该联系此API的支持团队。它构建得不好,应该封装这些值。你能控制这个字符串是如何创建的吗?有没有安全的规则可以遵循?例如,
=
之前的单词始终是一个没有逗号或空格的单词?另外,如果你能控制它,你能不能简单地切换到一个像JSON这样的已建立的格式?不,这是rest API的一个响应,因为逗号可能意味着很多事情,不要认为你能单独使用explode来实现这一点。你可以用一个具有前瞻性的正则表达式来完成它。。。直到下一个奇怪的数据格式击中你。如果您可以使用更好的数据格式,无论是带有分隔符的当前格式还是类似于JSON@Bharat您应该联系此API的支持团队。如果构建得不好,则应封装这些值。