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