我试图一次多次分解一个字符串,并将结果转换为有效的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);