我想显示一个显示为json格式但使用PHP的输出。我有一个用于排列水果及其颜色的数组。
阵列列表
红色=苹果,草莓
黄色=柠檬,成熟的芒果
<?php
class FruitColor
{
private $fruitcolor;
function FruitColor($fruitcolor)
{
$this->fruitcolor = $fruitcolor;
}
public function getFruits($color)
{
return NULL;
}
}
$fruitcolor = new FruitColor(array(
"red" => array("apple", "strawberry"),
"yellow" => array("lemon", "ripe mango")
));
echo $fruitcolor->getFruits("red");
echo "\n";
echo $fruitcolor->getFruits("violet");
?>
如您所见,此行echo $fruitcolor->getFruits("red");
代表红色
输出应该是这样的
{“颜色”:“红色”,“水果”:[“苹果”,“草莓”]}
如果数组中没有像紫色这样的颜色,则输出应该像这样
{“颜色”:“紫罗兰”,“水果”:[]}
这种像json一样的编码方式对我来说是新的。我想我应该在这个问题上使用IF ELSE语句吗?但是我不知道如何实现。
答案 0 :(得分:2)
您可以使用json编码来做到这一点。首先,您必须检查是否有水果。
$fruits = isset($this->fruitcolor[$color]) ? $this->fruitcolor[$color] : array();
这是if else语句的简写版本,如果存在则返回空列表,否则将返回结果列表。然后,您可以使用json_encode对结果进行编码。
class FruitColor
{
private $fruitcolor;
function __construct($fruitcolor)
{
$this->fruitcolor = $fruitcolor;
}
public function getFruits($color)
{
$fruits = isset($this->fruitcolor[$color]) ? $this->fruitcolor[$color] : array();
return array('color' => $color, 'fruits' => $fruits);
}
public function getFruitsJSON($color){
return json_encode($this->getFruits($color));
}
}
$fruitcolor = new FruitColor(array(
"red" => array("apple", "strawberry"),
"yellow" => array("lemon", "ripe mango")
));
echo $fruitcolor->getFruitsJSON("red");
echo "\n";
echo $fruitcolor->getFruitsJSON("violet");
在这里,getFruits将以php数组形式返回数据,而getFruitsJSON将以JSON编码的字符串形式返回该数组。
警告:不建议使用相同的类名来声明构造函数,而应使用__construct
。
答案 1 :(得分:1)
我不确定我是否理解你。通常,您要做的是通过将对象(在您的情况下为FruitColor)序列化为某种表示形式的序列化程序。 JSON。您想做的是,一个方法返回一个json字符串,该字符串肯定会破坏SRP,但仅出于教育目的,我来帮助您解决这个问题。
class FruitColor
{
private $fruitColors;
public function __construct(array $fruitColors)
{
$this->fruitColors = $fruitColors;
}
public function getFruits(string $color): string
{
return json_encode([
'color' => $color,
'fruits' => $this->fruitColors[$color] ?? []
]);
}
}
$fruitcolor = new FruitColor([
"red" => ["apple", "strawberry"],
"yellow" => ["lemon", "ripe mango"],
]);
echo $fruitcolor->getFruits("red");
echo "\n";
echo $fruitcolor->getFruits("violet");
另一种更好的方法是不在getFruits中使用json_encode,而是在此方法返回的数组上使用它。
答案 2 :(得分:0)
类似的东西...
<?php
class FruitColor
{
private $fruitcolor = array ( );
public function __construct ( $fruitcolor )
{
$this->fruitcolor = $fruitcolor;
}
public function getFruits ( $color )
{
return json_encode ( array ( 'color' => $color, 'fruits' => array ( ( ! empty ( $this->fruitcolor[$color] ) ? $this->fruitcolor[$color] : '' ) ) ) );
}
}
$fruitcolor = new FruitColor ( array ( 'red' => array ( 'apple', 'strawberry' ), 'yellow' => array ( 'lemon', 'ripe mango' ) ) );
echo $fruitcolor->getFruits ( 'red' ) . "\r\n";
echo $fruitcolor->getFruits ( 'violet' ) . "\r\n";
?>