Php 修改数组json格式
我有两个json数组,一个不同于另一个。 我需要打开此阵列:Php 修改数组json格式,php,json,Php,Json,我有两个json数组,一个不同于另一个。 我需要打开此阵列: { "medidas": [ { "desc_medida": "OMBROS", "tamanho": "G", "valor": 63 }, { "desc_medida": "OMBROS", "tamanho": "GG", "v
{
"medidas": [
{
"desc_medida": "OMBROS",
"tamanho": "G",
"valor": 63
},
{
"desc_medida": "OMBROS",
"tamanho": "GG",
"valor": 64
},
{
"desc_medida": "OMBROS",
"tamanho": "M",
"valor": 62
},
{
"desc_medida": "OMBROS",
"tamanho": "P",
"valor": 60
},
{
"desc_medida": "BUSTO",
"tamanho": "G",
"valor": 110
},
{
"desc_medida": "BUSTO",
"tamanho": "GG",
"valor": 114
},
{
"desc_medida": "BUSTO",
"tamanho": "M",
"valor": 104
},
{
"desc_medida": "BUSTO",
"tamanho": "P",
"valor": 100
},
{
"desc_medida": "CINTURA",
"tamanho": "G",
"valor": 110
},
{
"desc_medida": "CINTURA",
"tamanho": "GG",
"valor": 114
},
{
"desc_medida": "CINTURA",
"tamanho": "M",
"valor": 104
},
{
"desc_medida": "CINTURA",
"tamanho": "P",
"valor": 100
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "G",
"valor": 97
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "GG",
"valor": 98
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "M",
"valor": 96
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "P",
"valor": 95
}
]
}
以这种格式:
{
"header": ["TAMANHO", "OMBROS", "BUSTO", "CINTURA", "COMPRIMENTO"],
"rows": {
"P": ["P", "60 cm", "100 cm", "100 cm", "95 cm"],
"M": ["M", "62 cm", "104 cm", "104 cm", "96 cm"],
"G": ["G", "63 cm", "110 cm", "110 cm", "97 cm"],
"GG": ["GG", "64 cm", "114 cm", "114 cm", "98 cm"]
}
}
我需要用PHP来实现这一点。我做了很多测试,但没有得到结果
以下是我的尝试:
$j = json_decode($json,true);
$count = count($j['medidas']);
$descArray = array();
$rowArray = array();
$header = '{ "header":[';
$rows = '"rows":{';
/* MONTA O HEADER */
for($i = 0; $i < $count; $i ++){
$descArray[$i] = $j['medidas'][$i]['desc_medida'];
}
$descArray = array_values(array_unique($descArray));
array_unshift($descArray, "TAMANHO");
$count = count($descArray);
for($i = 0; $i < $count; $i++){
$header .= '"'.$descArray[$i].'",';
}
$header = substr($header,0,-1) . '],';
/* MONTA A ROW */
for($i = 0; $i < $count; $i ++){
for($a = 0; $a < count($j['medidas'][$i]); $a++){
$rows .= '"'.$j['medidas'][$i]['tamanho'].'"';
}
}
echo $header.$rows;
echo "<pre>";
print_r($j);
echo "</pre>";
如何更正此问题?也许您需要stdClass
$descs = [];
$sizes = [];
foreach($json->medidas as $medida)
{
$header = $medida->desc_medida;
$size = $medida->tamanho;
$size_value = $medida->valor;
$descs[$header] = 1;
$sizes[$size]['sizes'][] = $size_value . " cm";
}
$object = new stdClass;
$object->header = array_keys($descs);
$object->rows = new stdClass;
foreach (array_keys($sizes) as $size) {
$object->rows->$size = array_merge([$size], $sizes[$size]['sizes']);
}
echo json_encode($object);
印刷品
{“name”:“Joe Bloggs”,“jobtitle”:“Developer”,“arr”:[“arrval1”,“arrval2”]}
UPD:
其中一个问题是,您试图自己创建JSON格式,如果您首先创建真实的对象(或数组)结构,然后在其上调用
JSON\u encode
,那么创建JSON格式会容易得多
以下是可以完成此工作的代码:
$inputJSON = '{
"medidas": [
{
"desc_medida": "OMBROS",
"tamanho": "G",
"valor": 63
},
{
"desc_medida": "OMBROS",
"tamanho": "GG",
"valor": 64
},
{
"desc_medida": "OMBROS",
"tamanho": "M",
"valor": 62
},
{
"desc_medida": "OMBROS",
"tamanho": "P",
"valor": 60
},
{
"desc_medida": "BUSTO",
"tamanho": "G",
"valor": 110
},
{
"desc_medida": "BUSTO",
"tamanho": "GG",
"valor": 114
},
{
"desc_medida": "BUSTO",
"tamanho": "M",
"valor": 104
},
{
"desc_medida": "BUSTO",
"tamanho": "P",
"valor": 100
},
{
"desc_medida": "CINTURA",
"tamanho": "G",
"valor": 110
},
{
"desc_medida": "CINTURA",
"tamanho": "GG",
"valor": 114
},
{
"desc_medida": "CINTURA",
"tamanho": "M",
"valor": 104
},
{
"desc_medida": "CINTURA",
"tamanho": "P",
"valor": 100
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "G",
"valor": 97
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "GG",
"valor": 98
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "M",
"valor": 96
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "P",
"valor": 95
}
]
}';
与此示例数据一起使用:
$outputJSON = transformJSON($inputJSON);
echo $outputJSON;
你可以这样称呼它:
{
"header":["TAMANHO","OMBROS","BUSTO","CINTURA","COMPRIMENTO"],
"rows":{
"P":["P","60 cm","100 cm","100 cm","95 cm"],
"M":["M","62 cm","104 cm","104 cm","96 cm"],
"G":["G","63 cm","110 cm","110 cm","97 cm"],
"GG":["GG","64 cm","114 cm","114 cm","98 cm"]
}
}
输出如您所述:
你说你试过很多没用的东西。。。告诉我们你尝试了什么。我停在这里:我不能前进,但我们需要创建一个算法来修改这个json
$inputJSON = '{
"medidas": [
{
"desc_medida": "OMBROS",
"tamanho": "G",
"valor": 63
},
{
"desc_medida": "OMBROS",
"tamanho": "GG",
"valor": 64
},
{
"desc_medida": "OMBROS",
"tamanho": "M",
"valor": 62
},
{
"desc_medida": "OMBROS",
"tamanho": "P",
"valor": 60
},
{
"desc_medida": "BUSTO",
"tamanho": "G",
"valor": 110
},
{
"desc_medida": "BUSTO",
"tamanho": "GG",
"valor": 114
},
{
"desc_medida": "BUSTO",
"tamanho": "M",
"valor": 104
},
{
"desc_medida": "BUSTO",
"tamanho": "P",
"valor": 100
},
{
"desc_medida": "CINTURA",
"tamanho": "G",
"valor": 110
},
{
"desc_medida": "CINTURA",
"tamanho": "GG",
"valor": 114
},
{
"desc_medida": "CINTURA",
"tamanho": "M",
"valor": 104
},
{
"desc_medida": "CINTURA",
"tamanho": "P",
"valor": 100
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "G",
"valor": 97
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "GG",
"valor": 98
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "M",
"valor": 96
},
{
"desc_medida": "COMPRIMENTO",
"tamanho": "P",
"valor": 95
}
]
}';
$outputJSON = transformJSON($inputJSON);
echo $outputJSON;
{
"header":["TAMANHO","OMBROS","BUSTO","CINTURA","COMPRIMENTO"],
"rows":{
"P":["P","60 cm","100 cm","100 cm","95 cm"],
"M":["M","62 cm","104 cm","104 cm","96 cm"],
"G":["G","63 cm","110 cm","110 cm","97 cm"],
"GG":["GG","64 cm","114 cm","114 cm","98 cm"]
}
}