Php 如何分解以下字符串
如何分解以下字符串 $str=“ProductId=123,Name=古老的根,现代的追求,国家=印度,城市=班加罗尔,价格=3368” 这样输出数组将包含Php 如何分解以下字符串,php,Php,如何分解以下字符串 $str=“ProductId=123,Name=古老的根,现代的追求,国家=印度,城市=班加罗尔,价格=3368” 这样输出数组将包含 [ "ProductId" => "123", "Name" => "Ancient Roots, Modern Pursuits", "Country" => "India", "City" => "Bangalore", "Price" => "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的支持团队。如果构建得不好,则应封装这些值。