简体   繁体   中英

Transposing returned JSON object (PHP, mySQL)

The object I get back from my sql query is a single row with about 50 columns. It returns an object like this:

[
    {
        "State": "Alabama",
        "State Abbrev": "AL",
        "County": "Madison",
        "FIPS": "01089",
        "msa": "3440",
        "msaname": "HUNTSVILLE, AL",
        "cbsa": "26620",
        "cbsaname": "Huntsville, AL",
        "Population": "346892",
        "Length of Life Rank": "4",
        "Quality of Life Rank": "6",
    }
]

What I need is a format like this:

[
{ “column”: “State”, “value”: “Alabama” },
 { “column”: “State Abbrev”, “value”: “AL” },
 ...
 ]

How can I transpose the result to match my requirements? I'm getting the data like so:

$sql4 = "SELECT d.* FROM `mytable` s 
INNER JOIN `secondtable` c ON 
c.`zip_code` = s.`zip_code` 
INNER JOIN `anothertable` d ON 
d.`fips` = c.`fips` 
WHERE s.`ID` = '{$prov_number1}' group by `ID`"; 
$result4 = $dbh->query($sql4)->fetchAll(PDO::FETCH_ASSOC);
$data['demo_info'] = $result4;
header('Content-type: application/json');
echo json_encode($data);

EDIT: some good answers, but I think my results are coming back wrong because my data is stuctured differently than what I have above. If I var_dump $result4 , the structure is more like this:

array(1) {
  [0]=>
  array(93) {
    ["State"]=>
    string(7) "Alabama"
    ["State Abbrev"]=>
    string(2) "AL"
    ["County"]=>
    string(7) "Madison"
    ["FIPS"]=>
    string(5) "01089"
    ["msa"]=>
    string(4) "3440"
    ["msaname"]=>
    string(14) "HUNTSVILLE, AL"
    ["cbsa"]=>
    string(5) "26620"
}}

I'm thinking this might change the answers, as I've tried a few and get nothing in the "column" and all my data crammed into the "values".

Using foreach loop

$result = array();
$i = 0;
foreach($arr as $key => $value){
    $result[$i]['column'] = $key;
    $result[$i]['value'] = $value;
    $i++;
}
echo json_encode($result);

And using array_map

$result = array_map(function($k,$v){return array('column' => $k,'value' => $v);},  array_keys($arr),$arr);
echo json_encode($result);

DEMO

$finalresult = array();
$icount = 0 ;
foreach($result4 as $row) {
     foreach ( $row as $key => $val ) {

        $finalresult[$icount]["column"] = $key;
        $finalresult[$icount]["value"] = $val;
        $icount++;
     }
}   
$data['demo_info'] = $finalresult;

Try this:

$data = json_decode( $json );
$result = array();
$n=0;
foreach($data[0] as $k=>$v) {
    $result[$n]['column'] = $k;
    $result[$n]['value'] = $v;
    $n++;
}
$result_json = json_encode( $result );

Simply Generate the array like that and return -

$newArray = array_map(function($value, $key){
    return array('column' => $key, 'value' => $value);
}, $array, array_keys($array));

json_encode($newArray);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM