Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 修改数组json格式_Php_Json - Fatal编程技术网

Php 修改数组json格式

Php 修改数组json格式,php,json,Php,Json,我有两个json数组,一个不同于另一个。 我需要打开此阵列: { "medidas": [ { "desc_medida": "OMBROS", "tamanho": "G", "valor": 63 }, { "desc_medida": "OMBROS", "tamanho": "GG", "v

我有两个json数组,一个不同于另一个。 我需要打开此阵列:

{
    "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"]
}
}