2

私はプロジェクトに取り組んでいますが、困惑する問題に遭遇しました。以下のコードは、クラス ファイルと、動作を確認するためのテスト ページです。これは、サイトをプログラミングしている他の誰かのためのものです。それ以外の場合は、JSON 出力を別の方法でコーディングします。基本的に、それを実装する人は、データベースから一連のデータ (以下のような) を取得し、ループして、結果ごとにクラス オブジェクトをインスタンス化し、各インスタンスを配列にプラグインし、配列を printJson 関数に渡すだけです。 、JSON 文字列を出力します。ここに私が持っているものがあります:

結果.php

    <?php

    class Result
    {
        public $Category = NULL;
        public $Title = NULL;
        public $Price = NULL;

        public function __construct($category, $title, $price)
        {
            $this->Category = $category;
            $this->Title = $title;
            $this->Price = $price;
        }

        public static function printJson($arrayOfResults)
        {
            $output = '{"results": [';

            foreach ($arrayOfResults as $result)
            {
                $output += '{"category": "' . $result->Category . '",';
                $output += '"title": "' . $result->Title . '",';
                $output += '"price": "' . $result->Price . '",';
                $output += '},';
            }

            $output = substr($output, 0, -1);
            $output += ']}';

            return $output;
        }
    }

    ?>

getResults.php

    <?php

    require_once('Result.php');

    $res1 = new Result('food', 'Chicken Fingers', 5.95);
    $res2 = new Result('food', 'Hamburger', 5.95);
    $res3 = new Result('drink', 'Coke', 1);
    $res4 = new Result('drink', 'Coffee', 2);
    $res5 = new Result('food', 'Cheeseburger', 6.95);

    $x = $_GET['x'];

    if ($x == 1)
    {
        $array = array($res1);
        echo Result::printJson($array);
    }
    if ($x == 2)
    {
        $array = array($res1, $res2);
        echo Result::printJson($array);
    }
    if ($x == 3)
    {
        $array = array($res1, $res2, $res3);
        echo Result::printJson($array);
    }
    if ($x == 5)
    {
        $array = array($res1, $res2, $res3, $res4, $res5);
        echo Result::printJson($array);
    }

    ?>

最終結果は、getResults.php?x=5 に移動すると、JSON としてフォーマットされた $res1 から $res5 が返されます (これは単なるテストであり、本番環境ではこのようなことは決して行いません)。現在、「0」が出力されており、その理由を一生理解できません。foreach ループが正しく記述されていない可能性はありますか? どうぞ、あなたが提供できるどんな助けも素晴らしいでしょう!

4

1 に答える 1

2

+これは、次ではなく連結に使用しているためです.

$output .= '{"category": "' . $result->Category . '",';
$output .= '"title": "' . $result->Title . '",';
$output .= '"price": "' . $result->Price . '",';
$output .= '},';

ただし、実際には JSON を自分で作成しないでください。無効な JSON (末尾のコンマなど) を作成する多くのエラーが発生するためです。代わりに次のようなものを使用してください。

public static function printJson(array $arrayOfResults)
{
    $results['results'] = array_map('get_object_vars', $arrayOfResults);

    return json_encode($results);
}
于 2012-06-27T08:29:05.537 に答える