Как добавить условные данные в конец JSON

#php #laravel

#php #laravel

Вопрос:

Я перебираю отношения модели

 $formatted = [];
foreach($products->childProducts as $childProduct) {
        if($childProduct->product_type_id > 1) {
           $formatted['associated_products'][] = $this->coreProductInfo($childProduct);
       }
    }
  

Существует условие $childProduct->product_type_id , при котором при == 1 эти продукты не должны добавляться в приведенный выше массив. Вместо этого все эти продукты с product_type_id == 1 должны быть добавлены в последний раз, когда приведенный выше массив полностью подготовлен. т.е. Когда product_type_id: 2,3,4 … все они уже добавлены.

Как я могу добиться этого, чтобы все продукты с идентификатором типа 1 добавлялись в конец?

Ожидаемый результат:

 [{
    "id": 1,
    "product_name": "Shirts",
    "product_category": "Men Garments",
    "product_area": "Western",
    "product_region": "Mumbai",
    "product_type_id": "2",
    "product_uuid": "398jehiu3939e3393"
},
{
    "id": 2,
    "product_name": "Trousers",
    "product_category": "Men Garments",
    "product_area": "Eastern",
    "product_region": "Mumbai",
    "product_type_id": "3",
    "product_uuid": "dnnja3989389834343"
},
{
    "id": 3,
    "product_name": "Jeggings",
    "product_category": "Women Garments",
    "product_area": "Western",
    "product_region": "Delhi",
    "product_type_id": "1",
    "product_uuid": "ji202039844930300dj"
}
  

]

Комментарии:

1. храните их в двух отдельных массивах, объединяйте их после завершения цикла

Ответ №1:

Лучше всего использовать collection..

     $formatted = collect();
    foreach($products->childProducts as $childProduct) {
        if($childProduct->product_type_id > 1) {
            $formatted->prepend($this->coreProductInfo($childProduct));
        } else {
            $formatted->push($this->coreProductInfo($childProduct));
        }
    }
    $formatted->toArray();
  

Комментарии:

1. Большое вам спасибо @Svetoslav. Сработало как шарм!