使用php以json格式返回特定的数组值

时间:2019-02-14 18:12:41

标签: php json

我想显示一个显示为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语句吗?但是我不知道如何实现。

3 个答案:

答案 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";


 ?>