PHP与Json编码

时间:2016-12-10 19:34:32

标签: php android json

我连接我的数据库并获取一些信息,这部分是正确的。但我想对我的数据进行JSON编码。

这是我的代码

<?php

    include("ayar.php");
    header('Content-Type: application/json');   
    //$ad = $_POST["ad"];
    $ad = "USER89623476571";
    $bilgial    =   @mysql_query("SELECT * FROM KULLANICI WHERE ID_NUMARASI='$ad' ORDER BY ID ASC LIMIT 1");

    $oku=mysql_fetch_assoc($bilgial);
    $metin= $oku['BAGLI_CIHAZ_ID'];
    $yenimetin = explode(',',$metin); 

   foreach($yenimetin as $yazdir){ 
   bilgial($yazdir);
    }  

function bilgial($kullanicisi)
{

    $TERMINAL_BILGI_AL  =   @mysql_query("SELECT * FROM TERMINAL WHERE ID='$kullanicisi' ORDER BY ID ASC LIMIT 1");
    while($TERMINAL_KAYITLAR=@mysql_fetch_assoc($TERMINAL_BILGI_AL)){
        $GELEN_SERIAL               =   $TERMINAL_KAYITLAR["SERIALNUMBER"];
        $GELEN_TERMINAL_ADI         =   $TERMINAL_KAYITLAR["TERMINAL_ADI"];
        $GELEN_SICAKLIK_T1_ALT      =   $TERMINAL_KAYITLAR["SICAKLIK_T1_ALT"];
        $GELEN_SICAKLIK_T1_UST      =   $TERMINAL_KAYITLAR["SICAKLIK_T1_UST"];
        $GELEN_SICAKLIK_T2_ALT      =   $TERMINAL_KAYITLAR["SICAKLIK_T2_ALT"];
        $GELEN_SICAKLIK_T2_UST      =   $TERMINAL_KAYITLAR["SICAKLIK_T2_UST"];
        $GELEN_SICAKLIK_T3_ALT      =   $TERMINAL_KAYITLAR["SICAKLIK_T3_ALT"];
        $GELEN_SICAKLIK_T3_UST      =   $TERMINAL_KAYITLAR["SICAKLIK_T3_UST"];
        $GELEN_SICAKLIK_T1          =   $TERMINAL_KAYITLAR["SICAKLIK_T1_SON_DATA"];
        $GELEN_SICAKLIK_T2          =   $TERMINAL_KAYITLAR["SICAKLIK_T2_SON_DATA"];
        $GELEN_SICAKLIK_T3          =   $TERMINAL_KAYITLAR["SICAKLIK_T3_SON_DATA"];
        $GELEN_NEM_H1_ALT           =   $TERMINAL_KAYITLAR["NEM_H1_ALT"];
        $GELEN_NEM_H1_UST           =   $TERMINAL_KAYITLAR["NEM_H1_UST"];
        $GELEN_NEM_H2_ALT           =   $TERMINAL_KAYITLAR["NEM_H2_ALT"];
        $GELEN_NEM_H2_UST           =   $TERMINAL_KAYITLAR["NEM_H2_UST"];
        $GELEN_NEM_H3_ALT           =   $TERMINAL_KAYITLAR["NEM_H3_ALT"];
        $GELEN_NEM_H3_UST           =   $TERMINAL_KAYITLAR["NEM_H3_UST"];
        $GELEN_NEM_H1               =   $TERMINAL_KAYITLAR["NEM_H1_SON_DATA"];
        $GELEN_NEM_H2               =   $TERMINAL_KAYITLAR["NEM_H2_SON_DATA"];
        $GELEN_NEM_H3               =   $TERMINAL_KAYITLAR["NEM_H3_SON_DATA"];
        $GELEN_SICAKLIK_T1_AD       =   $TERMINAL_KAYITLAR["SICAKLIK_T1_AD"];
        $GELEN_SICAKLIK_T2_AD       =   $TERMINAL_KAYITLAR["SICAKLIK_T2_AD"];
        $GELEN_SICAKLIK_T3_AD       =   $TERMINAL_KAYITLAR["SICAKLIK_T3_AD"];
        $GELEN_NEM_H1_AD            =   $TERMINAL_KAYITLAR["NEM_H1_AD"];
        $GELEN_NEM_H2_AD            =   $TERMINAL_KAYITLAR["NEM_H2_AD"];
        $GELEN_NEM_H3_AD            =   $TERMINAL_KAYITLAR["NEM_H3_AD"];
        $GELEN_SON_DATA             =   $TERMINAL_KAYITLAR["GELEN_SON_DATA"];
        }


// Json datasına çevrilecek diziyi yaratalım.
$json = array(); 

$json["Bilgiler"][] = array( 
    'GELEN_SERIAL'=> $GELEN_SERIAL, 
    'TERMINAL_ADI'=> $GELEN_TERMINAL_ADI, 
    'SICAKLIK_T1'=> $GELEN_SICAKLIK_T1,
    'SICAKLIK_T2'=> $GELEN_SICAKLIK_T2,
    'SICAKLIK_T3'=> $GELEN_SICAKLIK_T3,
    'NEM_H1'=> $GELEN_NEM_H1,
    'NEM_H2'=> $GELEN_NEM_H2,
    'NEM_H3'=> $GELEN_NEM_H3,
    'SON_DATA'=> $GELEN_SON_DATA,

    );  

echo json_encode($json);    

}

?>

这是结果;

{"Bilgiler":
 [
   {"GELEN_SERIAL":"AGE6000010",
   "TERMINAL_ADI":"DENEME TERM",
   "SICAKLIK_T1":"23,8",
   "SICAKLIK_T2":"23,9",
   "SICAKLIK_T3":"23,8",
   "NEM_H1":"30",
   "NEM_H2":"29",
   "NEM_H3":"31",
   "SON_DATA":"2016-10-31 20:54:00"}
   ]
}{"Bilgiler":
  [
    {"GELEN_SERIAL":"AGE6000022",
    "TERMINAL_ADI":"Eczane",
    "SICAKLIK_T1":"23,0",
    "SICAKLIK_T2":"23,0",
    "SICAKLIK_T3":"22,9",
    "NEM_H1":"21",
    "NEM_H2":"21",
    "NEM_H3":"30",
    "SON_DATA":"2016-12-10 16:58:00"}
  ]
}

但是,我希望它是这个;

{"Bilgiler": 
  [
    {"GELEN_SERIAL":"AGE6000010",
    "TERMINAL_ADI":"DENEME TERM",
    "SICAKLIK_T1":"23,8",
    "SICAKLIK_T2":"23,9",
    "SICAKLIK_T3":"23,8",
    "NEM_H1":"30",
    "NEM_H2":"29",
    "NEM_H3":"31",
    "SON_DATA":"2016-10-31 20:54:00"

    },
    {"GELEN_SERIAL":"AGE6000010",
    "TERMINAL_ADI":"DENEME TERM",
    "SICAKLIK_T1":"23,8",
    "SICAKLIK_T2":"23,9",
    "SICAKLIK_T3":"23,8",
    "NEM_H1":"30",
    "NEM_H2":"29",
    "NEM_H3":"31",
    "SON_DATA":"2016-10-31 20:54:00"}
  ]
}

我怎么能这样做,我在PHP代码中有什么变化?

2 个答案:

答案 0 :(得分:1)

这里应该改变什么:

// previous code here

$json = array();    
foreach($yenimetin as $yazdir) { 
    // see - each result of `bilgial` function you add to an array
    $json['Bilgiler'][] = bilgial($yazdir);
} 
echo json_encode($json); 

bilgial功能的变化:

function bilgial($kullanicisi)
{

    $TERMINAL_BILGI_AL  =   @mysql_query("SELECT * FROM TERMINAL WHERE ID='$kullanicisi' ORDER BY ID ASC LIMIT 1");

    // codes here.
    // instead of encoding every array - return it:

    // $json = array(); // this line is useles

    return array( 
        'GELEN_SERIAL'=> $GELEN_SERIAL, 
        'TERMINAL_ADI'=> $GELEN_TERMINAL_ADI, 
        'SICAKLIK_T1'=> $GELEN_SICAKLIK_T1,
        'SICAKLIK_T2'=> $GELEN_SICAKLIK_T2,
        'SICAKLIK_T3'=> $GELEN_SICAKLIK_T3,
        'NEM_H1'=> $GELEN_NEM_H1,
        'NEM_H2'=> $GELEN_NEM_H2,
        'NEM_H3'=> $GELEN_NEM_H3,
        'SON_DATA'=> $GELEN_SON_DATA,
    );  
}

更进一步 - 你可以使用WHERE IN sql子句并只调用你的函数一次。

正如我已经提到的那样 - 停止使用已弃用的mysql扩展名 asap

答案 1 :(得分:1)

您可以采用MVC样式编码。 创建代码,并分离不同的部分。

在这里,您有以下逻辑:

Call SQL1
While on SQL1 results {
  call function
    Call SQL2
    While on SQL2 results {
      get values
    }
    Write json values
 }

如您所见,您将有几个json电话。 所以,你应该:

Create finalVariable
Call SQL1
While on SQL1 results {
  call function
    Call SQL2
    While on SQL2 results {
      get values
    }
    set final values on finalVariable (return values of function ?)
 }
 Call json encode on finalVariable

示例:

<?php 
function bilgial($param) {
  // ...
  return [
    'GELEN_SERIAL' => $GELEN_SERIAL,
    // ...
  ]
}

$finalValues = [];
foreach($yenimetin as $yazdir){ 
    $finalValues['Bilgiler'][] = bilgial($yazdir);
}

echo json_encode($finalValues);