一次试图将字符串爆炸,然后将结果转换为有效的json,我无法弄清楚方法
我试图爆炸并在每次爆炸中进行foreach,但对我没有任何作用
$str='ID=62981155;IT=OV80419674-62981155_1_3;OD=15.4;|ID=62981157;IT=OV80419674-62981157_1_3;OD=3.1;|ID=62981159;IT=OV80419674-62981159_1_3;OD=8.13;|';
$array = explode(';|',$str);
foreach($array as $key => $val)
{
$v = explode(";",$val);
foreach($v as $v1)
{
$v2= explode("=",$v1);
foreach($v2 as $k => $s)
{
$u[] = $s;
}
}
}
echo json_encode($u);
我现在得到的结果是: [“ ID”,“ 62981155”,“ IT”,“ OV80419674-62981155_1_3”,“ OD”,“ 15.4”,“ ID”,“ 62981157”,“ IT”,“ OV80419674-62981157_1_3”,“ OD”,“ 3。“,” ID“,” 62981159“,” IT“,” OV80419674-62981159_1_3“,” OD“,” 8.13“,”“]
预期结果是: [{“ ID”:62981155,“ IT”:“ OV80419674-62981155_1_3”,“ OD”:15.4},{“ ID”:62981157,“ IT”:“ OV80419674-62981157_1_3”,“ OD”:3.1},{ “ ID”:62981159,“ IT”:“ OV80419674-62981159_1_3”,“ OD”:8.13}]
答案 0 :(得分:2)
我将数据分为两个级别,$out
是整体内容,$u
是每个单独的详细信息集(在每个循环中重置)。
请注意,在内部循环中,您用=
对其进行了拆分,它将返回一个键和一个值。这用于设置关联数组,而不仅仅是将每个值添加到数组中。
$array = explode(';|',$str);
$array = array_filter($array);
$out = [];
foreach($array as $key => $val)
{
$u = [];
$v = explode(";",$val);
foreach($v as $v1)
{
list($key, $value) = explode("=",$v1);
$u[$key] = $value;
}
$out[] = $u;
}
echo json_encode($out);
答案 1 :(得分:0)
因为第二个爆炸为您提供了“ KEY = VALUE”之类的对,所以第三个爆炸已经为您提供了所需的条件:KEY和VALUE。无需循环运行,可以使用list一次提取两个值
<?php
$str='ID=62981155;IT=OV80419674-62981155_1_3;OD=15.4;|ID=62981157;IT=OV80419674-62981157_1_3;OD=3.1;|ID=62981159;IT=OV80419674-62981159_1_3;OD=8.13;|';
$array = explode(';|', $str);
$u = [];
foreach($array as $key => $val)
{
if (empty($val)) {
continue;
}
$tmp = [];
foreach(explode(";", $val) as $v1)
{
list($k, $s) = explode("=", $v1);
$tmp[$k] = $s;
}
$u[] = $tmp;
}
echo json_encode($u);
此打印
[{“ ID”:“ 62981155”,“ IT”:“ OV80419674-62981155_1_3”,“ OD”:“ 15.4”},{“ ID”:“ 62981157”,“ IT”:“ OV80419674-62981157_1_3” ,“ OD”:“ 3.1”},{“ ID”:“ 62981159”,“ IT”:“ OV80419674-62981159_1_3”,“ OD”:“ 8.13”}]
答案 2 :(得分:0)
您可以使用正则表达式解析字符串,然后循环匹配。
在循环中,我寻找|
作为第一个字符,以确定何时移至下一组。
preg_match_all("/(.*?)\=(.*?);/", $str, $match);
//var_dump($match);
$i = 0;
foreach($match[1] as $key => $m){
if($m[0] == "|"){
$i++;
$u[$i][substr($m,1)] = $match[2][$key];
}else{
$u[$i][$m] = $match[2][$key];
}
}
echo json_encode($u);