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

    ?>

获取结果.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,它将返回 $res1 到 $res5(同样,这只是为了测试,我永远不会在生产中做这样的事情)格式为 JSON。现在,我得到了“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 回答