【问题标题】:Transposing returned JSON object (PHP, mySQL)转置返回的 JSON 对象(PHP、mySQL)
【发布时间】:2015-05-27 12:28:26
【问题描述】:

我从我的 sql 查询返回的对象是单行,大约有 50 列。它返回一个像这样的对象:

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

我需要的是这样的格式:

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

如何转换结果以符合我的要求?我得到的数据是这样的:

$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);

编辑:一些很好的答案,但我认为我的结果是错误的,因为我的数据结构与上面的不同。如果我var_dump$result4,结构更像这样:

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

我认为这可能会改变答案,因为我已经尝试了一些,但在“列”中什么也没有得到,而且我的所有数据都被塞进了“值”中。

【问题讨论】:

    标签: php mysql json


    【解决方案1】:

    使用foreach循环

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

    并使用array_map

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

    DEMO

    【讨论】:

    • 我没有做和你一样的事情,不过你可以检查一下。
    • 我不这么认为。你检查了我的链接DEMO。它的输出如您所料。您能否详细说明为什么它不适合您。
    【解决方案2】:
    $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;
    

    【讨论】:

    • 这基本上没有给我“列”中的任何数据,而我之前在“值”中的数据相同
    【解决方案3】:

    试试这个:

    $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 );
    

    【讨论】:

      【解决方案4】:

      只需像这样生成数组并返回 -

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

      【讨论】:

      • 你需要检查用户想要什么作为输出
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 2017-05-04
      相关资源
      最近更新 更多