检索循环中的所有值并将其格式化为json

时间:2013-02-04 15:38:38

标签: php json

我正在尝试构建一个查询我的数据库然后格式化输出的页面,以便另一个webservice/page可以访问数据。

理想情况下,我想探索以JSON格式提供数据,但这不起作用。我遇到的另一个比JSON更不重要的问题是,如果$reportsResult中有3条记录,则只显示最后一条记录。

任何有帮助的人请。我还需要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 个答案:

答案 0 :(得分: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)。

答案 1 :(得分: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);

答案 2 :(得分:0)

我不确定为什么你定义了那个类,但你知道你的每个人都有类似的东西

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

然后你可以使用print_r检查最终的数组 输出时你可以简单地做一个打印json_encode($ data),它会给你一个包含数据数组中所有项目的json字符串。

答案 3 :(得分: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。