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

OK 设法弄清楚如何从循环中获取所有记录,但是当我执行 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

您可能会遇到问题,因为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 回答
0

在 php 中(至少), json_encode 将数组作为参数。
因此,您应该向您的类添加一个构造函数

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

一个用于将全名作为一个数组,准备好被 jsoned

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 回答