2

2列の結果をプルバックするPHPのMySQLクエリがあります

列1はラベル列2は値です

http://nitschinger.at/Handling-JSON-like-a-boss-in-PHPを読みましたが、MySQLからPHPで次のJSONを実行する方法を理解するのに苦労しています

[
  {
    key: "Cumulative Return",
    values: [
      { 
        "label": "One",
        "value" : 29.765957771107
      } , 
      { 
        "label": "Two",
        "value" : 0
      } , 
      { 
        "label": "Three",
        "value" : 32.807804682612
      } , 
      { 
        "label": "Four",
        "value" : 196.45946739256
      } , 
      { 
        "label": "Five",
        "value" : 0.19434030906893
      } , 
      { 
        "label": "Six",
        "value" : 98.079782601442
      } , 
      { 
        "label": "Seven",
        "value" : 13.925743130903
      } , 
      { 
        "label": "Eight",
        "value" : 5.1387322875705
      }
    ]
  }
]

上記のように生のテキストを出力してJSONを形成するループを手動で作成できますが、本当にjson_encodeを使用したいと思います。

<?php
$hostname = 'localhost'; //MySQL database
$username = 'root'; //MySQL user
$password = ''; //MySQL Password

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=etl", $username, $password);

    $query = "select label, value from table";

    $stmt = $dbh->prepare($query);
    $stmt->execute();

    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if (!empty($result)) {
        echo '[
        {
          key: "Cumulative Return",
          values: [';

        for ($row = 0; $row < count($result); $row++) {
            echo "{";
            echo '"label": "' . $result[$row]['Label'] . '",';
            echo '"Value": ' . $result[$row]['Value'];
            echo "},";
            echo '       ]
      }
    ]';
        }

    }
}
catch (PDOException $e) {
    echo $e->getMessage();
}

?> 

これはできますか?もしそうなら、どのように?

4

6 に答える 6

4

使用するjson_encode()

$jsonArr = array( 'key' => 'Cumulative Return' , 'values' => array() );


foreach ($result as $res) 
{
   $jsonArr['values'][] = array('label'=>$res['Label'],'value'=>$res['value']);

}

echo json_encode($jsonArr);
于 2013-01-10T13:32:22.413 に答える
3

これを試して:

$hostname = 'localhost'; //MySQL database
$username = 'root'; //MySQL user
$password = ''; //MySQL Password

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=etl", $username, $password);

    $query = "select label, value from table";

    $stmt = $dbh->prepare($query);
    $stmt->execute();

    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $values = array();

    for($row = 0; $row < count($result); $row++)
    {
        $values[] = array('label' => $result[$row]['Label'], 'value' => $result[$row]['Value']);
    }

    $to_encode = array(
                        array('key' => 'Cumulative Return', 
                              'values' => $values;
                              )
                        );
    echo json_encode($to_encode);

} catch (PDOException $e) {
    echo $e->getMessage();
}
于 2013-01-10T13:32:57.793 に答える
2

jsonに変換したい方法で配列を作成する必要があります。

$encode = array(
    'key' => 'Cumulative Return', 
    'values' => $result->fetchAll(PDO::FETCH_ASSOC)
);
echo json_encode($encode);

これはあなたが求めているものでなければなりません。

于 2013-01-10T13:29:10.727 に答える
1

これがJSONの有用性です。手動でエンコードする必要はありません。

$json = array();
$results = array();
$json['key'] = 'Cumulative return';

foreach ($row as $entry) {
    $results['label'] = $entry['Label'];
    $results['value'] = $entry['Value'];
    $json['value'][] = $results;
}

echo json_encode($json);

以上です。楽しみ!

于 2013-01-10T13:31:37.630 に答える
0

コードイグナイターを使用しているIam

これは私がデータベースからの値からカスタムjsonを作成した方法ですそれが役立つことを願っています

function getData() {

		$query = $this -> db -> get('gcm_users');
		
		$result_array=array();

		if ($query -> num_rows() > 0) {
			
			$results=$query->result();

			foreach ( $results as $row) {
				
				$data=array();
				
				$data['name']=$row->name;
				$data['email']=$row->email;
				
				array_push($result_array,$data)	;		
			}

			

			return json_encode($result_array);

		} else {

			echo "something went wrong";

		}
	}

これは、コードイグナイターなどのフレームワークを使用しているため、データベースからデータを取得するための私の関数です。このコードから必要なものを抽出できることを願って、他のSQL操作について心配する必要はありません。

出力はこんな感じ

[{"name":"allu","email":"allu@gmail.com"},{"name":"ameeen","email":"cdfdfd@gmail.com"}]

于 2015-03-03T05:14:59.017 に答える
0

単純な関数を作成します(フェッチされたデータを完全に制御できるため、json_encodeを使用することを好みます)。

    public function mysqlToJoson($mysqlarray)
    {
        $json_string = "[";

        while ($array = $mysqlarray->fetch()) {
            $i = 1;
            if ($json_string != "["){$json_string .= ",";}
            foreach ($array as $key => $value) {
                if ($i == 1) {
                    $json_string .= '{"' . $key . '":' . '"' . htmlentities($value,ENT_QUOTES, 'UTF-8') . '"';
                } else $json_string .= ',"' . $key . '":' . '"' . htmlentities($value,ENT_QUOTES, 'UTF-8') . '"';
                $i++;
            }
            $json_string .= '}';
        }
        $json_string .= ']';
        return $json_string;
    }
于 2020-06-17T10:29:28.257 に答える