如何返回json对象的数组 - PHP

时间:2015-12-16 11:29:15

标签: php arrays json

我需要将一些数据发送到前端作为json对象的数组,它基本上应该具有与此json相同的结构:

[{"vin":"U5YFF24128L064909","0":"U5YFF24128L064909","case_id":"1462538","1":"1462538","claimnumber":"E140039698","2":"E140039698","platenumber":"5M47465","3":"5M47465","axrmrs_id":"2051707","4":"2051707","insurer_memberid":"MM-O-8AB24F6D-1","5":"MM-O-8AB24F6D-1","country":"CZ","6":"CZ","date_created":"2014-02-10 00:00:00","7":"2014-02-10 00:00:00","totalloss":"N","8":"N","lastcalc_manufacturer_code":"28","9":"28","lastcalc_model_code":"25","10":"25","lastcalc_submodel_code":"07","11":"07","audavin_triggered":"","12":"","accident_date":"2014-02-02 00:00:00","13":"2014-02-02 00:00:00","registration_date":"2008-04-28 00:00:00","14":"2008-04-28 00:00:00","manufacturing_year":"2008","15":"2008","spareparts":"26573.4","16":"26573.4","totalcosts":"42187.47","17":"42187.47","laborhours":"7.3","18":"7.3","laborcosts":"3577","19":"3577","calculationdate":"2014-02-22 23:02:00","20":"2014-02-22 23:02:00","paintlabor":"5995","21":"5995","paintmaterial":"6042.07","22":"6042.07","currency":"CZK","23":"CZK","manufacturer":"KIA","24":"KIA","model":"CEED (ED)","25":"CEED (ED)","submodel":"ACTIVE","26":"ACTIVE","orgName":"Global Expert","27":"Global Expert","textL":"BLATN\u00cdK P PLAKOV\u00c1N\u00cd NOV\u00ddCH D\u00cdL\u016e,DVE\u0158E P PLAK POVRCHU,P\u0158-N\u00c1RAZN\u00cdKLAKOV\u00c1N\u00cd NOV\u00ddCH D\u00cdL\u016e","28":"BLATN\u00cdK P PLAKOV\u00c1N\u00cd NOV\u00ddCH D\u00cdL\u016e,DVE\u0158E P PLAK POVRCHU,P\u0158-N\u00c1RAZN\u00cdKLAKOV\u00c1N\u00cd NOV\u00ddCH D\u00cdL\u016e","textE":null,"29":null},{"vin":"U5YFF24128L064909","0":"U5YFF24128L064909","case_id":"1468328","1":"1468328","claimnumber":"5M47465","2":"5M47465","platenumber":"5M47465","3":"5M47465","axrmrs_id":"2037572","4":"2037572","insurer_memberid":"","5":"","country":"CZ","6":"CZ","date_created":"2014-02-13 00:00:00","7":"2014-02-13 00:00:00","totalloss":"","8":"","lastcalc_manufacturer_code":"28","9":"28","lastcalc_model_code":"25","10":"25","lastcalc_submodel_code":"07","11":"07","audavin_triggered":"","12":"","accident_date":"0000-00-00 00:00:00","13":"0000-00-00 00:00:00","registration_date":"0000-00-00 00:00:00","14":"0000-00-00 00:00:00","manufacturing_year":"2008","15":"2008","spareparts":"25319.55","16":"25319.55","totalcosts":"41529.62","17":"41529.62","laborhours":"7.7","18":"7.7","laborcosts":"3850","19":"3850","calculationdate":"2014-02-23 23:02:00","20":"2014-02-23 23:02:00","paintlabor":"5995","21":"5995","paintmaterial":"6042.07","22":"6042.07","currency":"CZK","23":"CZK","manufacturer":"KIA","24":"KIA","model":"CEED (ED)","25":"CEED (ED)","submodel":"ACTIVE","26":"ACTIVE","orgName":"0","27":"0","textL":"BLAT","textE":null,"29":null}]

我如何尝试:

foreach ( $array ['result'] ['claim'] as $claim )
    {

        $data = array (
            "claimnumber" =>$claim['@attributes']['id'],
            "date_created" =>$claim['country'],
            "country" =>$claim['creation'],
            "currency" =>$claim ['specific']['currency'],
            "insurer_memberid" =>$claim['insurance']['id'],
            "laborcosts" =>$claim ['specific']['partsCost'],
            "model" =>$claim ['specific']['model_name'],
            "orgName" =>$claim['insurance']['name'],
            "paintLabor" =>$claim['specific']['paintmaterial'],
            "totalcosts" =>$claim ['assessment']['damage-value']
        );
        $result = array();
        $result[] = $data;
        $result[] = array_push($result, $this->convertToJson($result));
    }
    echo $result;

但是这只返回字符串“Array”,是否有一些很好的方法如何创建显示对象数组的API?

感谢您的任何建议:)

4 个答案:

答案 0 :(得分:3)

基本上你在每个循环中重置$result变量。将代码更改为:

$result = array();
foreach ($array['result']['claim'] as $claim) {
    $result[] = array (
        "claimnumber"      => $claim['@attributes']['id'],
        "date_created"     => $claim['country'],
        "country"          => $claim['creation'],
        "currency"         => $claim['specific']['currency'],
        "insurer_memberid" => $claim['insurance']['id'],
        "laborcosts"       => $claim['specific']['partsCost'],
        "model"            => $claim['specific']['model_name'],
        "orgName"          => $claim['insurance']['name'],
        "paintLabor"       => $claim['specific']['paintmaterial'],
        "totalcosts"       => $claim['assessment']['damage-value']
    );
}

echo json_encode($result);

答案 1 :(得分:3)

在循环之前创建数组,在循环中添加数据,然后在循环之后添加json_encode和echo:

$result = array();
foreach ( $array ['result'] ['claim'] as $claim )
{

    $data = array (
        "claimnumber" =>$claim['@attributes']['id'],
        "date_created" =>$claim['country'],
        "country" =>$claim['creation'],
        "currency" =>$claim ['specific']['currency'],
        "insurer_memberid" =>$claim['insurance']['id'],
        "laborcosts" =>$claim ['specific']['partsCost'],
        "model" =>$claim ['specific']['model_name'],
        "orgName" =>$claim['insurance']['name'],
        "paintLabor" =>$claim['specific']['paintmaterial'],
        "totalcosts" =>$claim ['assessment']['damage-value']
    );
    $result[] = $data;
}
echo json_encode($result);

答案 2 :(得分:2)

  1. array_push()通过引用获取第一个参数(数组),您不需要将其分配给$ result。 所以应该只是array_push($result, $this->convertToJson($result));

  2. 要返回json,您可以使用json_encode函数

    echo json_encode($ result);

答案 3 :(得分:0)

使用print_r()方法打印$ result,因为$ result是一个数组变量。

    $result = array();
    foreach ( $array ['result'] ['claim'] as $claim )
        {

            $data = array (
                "claimnumber" =>$claim['@attributes']['id'],
                "date_created" =>$claim['country'],
                "country" =>$claim['creation'],
                "currency" =>$claim ['specific']['currency'],
                "insurer_memberid" =>$claim['insurance']['id'],
                "laborcosts" =>$claim ['specific']['partsCost'],
                "model" =>$claim ['specific']['model_name'],
                "orgName" =>$claim['insurance']['name'],
                "paintLabor" =>$claim['specific']['paintmaterial'],
                "totalcosts" =>$claim ['assessment']['damage-value']
            );
            $result[] = $data;
            $result[] = array_push($result, $this->convertToJson($result));
        }
        print_r($result) ;