0

webservice/pageデータベースにクエリを実行し、出力をフォーマットして別のユーザーがデータにアクセスできるようにするページを作成しようとしています。

理想的には、データを JSON 形式にすることを検討したかったのですが、うまくいきません。JSON が機能しないことよりも大きな問題は、 に 3 つのレコードがある場合$reportsResult、最後のレコードのみが表示されることです。

誰か助けてください。print_rああ、外部ウェブページがデータを取得するため にも必要ですか、それとももっと良い方法がありますか?

class Pupil {
    public $FirstName = "";
    public $LastName  = "";
}

foreach($reportsResult->getRecords() as $reportRecord) {
    $Pupil = new Pupil();
    $Pupil->FirstName = $reportRecord->getField('FName');
    $Pupil->LastName = $reportRecord->getField('SName');
}
json_encode($Pupil);

ループからすべてのレコードを取得する方法はわかりましたが、print_r を実行してもまだ json 形式で表示されません。何か不足していますか?

$AllPupils = array();

foreach($reportsResult->getRecords() as $reportRecord)
{

$Pupil = new Pupil();
$Pupil->FamID = $reportRecord->getField('FName');
$Pupil->ChildName = $reportRecord->getField('SName');

array_push($AllPupils, $Pupil);
}

json_encode($AllPupils);
4

4 に答える 4

2

foreach ループが再び開始されるたびに、$Pupil変数がオーバーライドされます。代わりに配列を試してください:

$Pupil = array()
$i = 0;
foreach($reportsResult->getRecords() as $reportRecord) {
    $Pupil[$i] = new Pupil();
    $Pupil[$i]->FirstName = $reportRecord->getField('FName');
    $Pupil[$i]->LastName = $reportRecord->getField('SName');
    $i++;
}
echo json_encode($Pupil);

編集:mikemackintoshのソリューションも機能するはずで、少し速くなる可能性があります(foreachループのサイズによって異なります)。

データに必要な結果を表示するにはecho( だけでなくjson_encode)。

于 2013-02-04T15:45:37.117 に答える
0

PHP (少なくとも) では、json_encode は配列をパラメーターとして受け取ります。
したがって、クラスにコンストラクターを追加する必要があります

function __construct($first, $last)
{
    this.$FirstName = $first;
    this.$LastName = $last;
}

もう 1 つは完全な名前を配列として取得するためのもので、json 化する準備ができています

function getNameArray()
{
    $nameArray = array();
    $nameArray['firstName'] = this.$FirstName;
    $nameArray['lastName'] = this.$LastName;

    return $nameArray;
}

次に、その foreach で、すべての生徒を含む別の配列を作成します

$pupils = array();
foreach (bla bla)
{
    $first = $reportRecord->getField('FName');
    $last = $reportRecord->getField('SName');
    $Pupil = new Pupil($first, $last);

    array_push($pupils, $pupil.getNameArray());
}

最後に、すべての準備が整いました

json_encode($pupils);

あなたのものをデバッグする他の方法があると確信しています。私は主にprint_rも使用しています。

于 2013-02-04T15:55:26.367 に答える
0

json_encodeオブジェクト全体を処理しないため、問題が発生する可能性があります。そのために、オブジェクトをシリアライズすることができ$Pupilます。

ただし、以下のようなものがうまくいくかもしれません。返された配列に値を割り当て、json_encode正常に実行できるようにします。

class Pupil {
    public $FirstName = "";
    public $LastName  = "";

    public function getAttr(){
        return array("FirstName" => $this->FirstName, "LastName" => $this->LastName);
    }
}

$json = array();

foreach($reportsResult->getRecords() as $reportRecord) {
    $Pupil = new Pupil();
    $Pupil->FirstName = $reportRecord->getField('FName');
    $Pupil->LastName = $reportRecord->getField('SName');

    $json[] = $Pupil->getAttr();
}

echo json_encode($json);
于 2013-02-04T15:46:10.677 に答える
0

なぜそのクラスが定義されているのかわかりませんが、 for each に次のようなものがあることはわかっています

foreach ($reportsResult->getRecords() as $key => $record) {
  $data[$key]['firstname'] = $record->getField('Fname');
  $data[$key]['lastname'] = $record->getField('Sname');
}

次に、print_r を使用して最終的な配列を確認できます。出力中に単純に print json_encode($data) を実行すると、データ配列内のすべての項目の json 文字列が得られます。

于 2013-02-04T15:50:54.713 に答える