Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 访问数组中的类实例_Php_Json - Fatal编程技术网

Php 访问数组中的类实例

Php 访问数组中的类实例,php,json,Php,Json,我在做一个项目,遇到了一个让我困惑的问题。下面的代码是一个类文件和一个测试页面,以确保它正常工作。这是为正在编写站点的其他人编写的,否则我将以不同的方式编写JSON输出。基本上,实现它的人只需从数据库中提取一组数据(如下所示),然后循环,为每个结果实例化一个类对象,并将每个实例插入一个数组,然后将数组传递给printJson函数,该函数将打印JSON字符串。以下是我所拥有的: Results.php <?php class Result { pub

我在做一个项目,遇到了一个让我困惑的问题。下面的代码是一个类文件和一个测试页面,以确保它正常工作。这是为正在编写站点的其他人编写的,否则我将以不同的方式编写JSON输出。基本上,实现它的人只需从数据库中提取一组数据(如下所示),然后循环,为每个结果实例化一个类对象,并将每个实例插入一个数组,然后将数组传递给printJson函数,该函数将打印JSON字符串。以下是我所拥有的:

Results.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

    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

    <?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

    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循环是否不能正确编写?求求你,你能提供的任何帮助都会很棒

这是因为您使用的是
+
进行串联,而不是

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

不要自己构建JSON字符串。在这种情况下,只考虑界面。你在评论中的原始建议比这个答案要好得多。所以你可能想把它也包括在答案中。我正在添加它:-)@cbuckley:以防万一,我把答案编辑了一点。请看一看。@hakre我没有采取这种方法的唯一原因是为了让OP更清晰一点:-)哦,谢谢你,真不敢相信这是件如此愚蠢的事。我还将研究json_编码。谢谢