我试图一次多次分解一个字符串,并将结果转换为有效的json,但我无法找到方法。
我试着爆炸,每次爆炸都要做前科,但没有什么对我有用

$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}]

最佳答案

我建立了两个层次的数据,$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);

10-08 06:30