KitaXvost
@KitaXvost

Как исправить вывод JSON в PHP?

Данный класс формирует неудобный для парсинга json:
class Order extends JsonResource
{
    public function toArray($request)
    {
        return [
            'order_id'     => $this->id,
            'order_products'   => $this->order_product,
            'products'         => $this->prod,
          ];
    }
}


выводит:
[
   {
      "order_id":1,
      "order_products":[
         {
            "id":1,
            "order_id":1,
            "product_id":8,
            "quantity":1,
            "price":141
         },
         {
            "id":2,
            "order_id":1,
            "product_id":30,
            "quantity":2,
            "price":509
         },
         {
            "id":3,
            "order_id":1,
            "product_id":21,
            "quantity":1,
            "price":399
         }
      ],
      "products":[
         {
            "id":8,
            "name":"Product_8",
         },
         {
            "id":21,
            "name":"Product_21",
         },
         {
            "id":30,
            "name":"Product_30",
         }
      ]
   },

Как из вложенного массива products взять поле name в массив order_products, соотнеся name.id с order_products.product_id?
Т.е. нужно избежать вложенного массива products
И получить в итоге:
"order_products":[
         {
            "id":1,
            "order_id":1,
            "product_id":8,
            "quantity":1,
            "price":141,
            "name":"Product_8",
         },
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 2
dark_tke
@dark_tke
Разработчик ИС для образования (php, laravel, 1c)
Как то так, код не проверялся на работоспособность, но принцип думаю понятен
public function toArray($request)
	{
		$products = (array) $this->prod;
		$order_product = null;
		foreach ($this->order_product AS $order)
		{
			$order['name'] = array_filter($products, function ($item) use ($order){
			return ($item['id'] === $order['product_id']);
			})[0]['name'];
			$order_product[] = $order;
		}
		return [
			'order_id'     => $this->id,
			'order_products'   => $order_product,
		];
	}
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
class Order extends JsonResource
{
    public function toArray($request)
    {
        $return = $this->order_product[ array_search(array('id' => $this->id), $this->order_product) ];
        $return['name'] = $this->prod[ array_search(array('id' => $this->id), $this->prod) ]['name'];
        return $return;
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы