Sok Chanty
Sok Chanty

Reputation: 1816

Laravel- How to Remove a key from collection?

I have data as below:

[
        {
            "id": "3",
            "title": "Boruto's Photo",
            "is_lottery": 1,
            "price": 10
        },
        {
            "id": "4",
            "title": "Misuki's Photo",
            "is_lottery": 0,
            "price": 20
        }

    ]

I want to filter which is is_lottery == false remove the price key from this collection. The output is:

[
        {
            "id": "3",
            "title": "Boruto's Photo",
            "is_lottery": 1,
            "price": 10
        },
        {
            "id": "4",
            "title": "Misuki's Photo",
            "is_lottery": 0,
        }

    ]

Upvotes: 3

Views: 20230

Answers (3)

Kingsley Uchenna
Kingsley Uchenna

Reputation: 700

$json = [
        {
            "id": "3",
            "title": "Boruto's Photo",
            "is_lottery": 1,
            "price": 10
        },
        {
            "id": "4",
            "title": "Misuki's Photo",
            "is_lottery": 0,
            "price": 20
        }

    ];

$filtered = collect(json_decode($json))->map(function($value, $key) {
    if (!$value['is_lottery']) {
      Arr::except($value, 'price');
   }
   return $value;
});

Upvotes: 1

ronydavid
ronydavid

Reputation: 383

you can declare new variable called $newCollection as final collection. Use foreach() to iterate your collection then delete the is_lottery from collection by using unset() then push it to $newCollection, this is example how you can delete it using foreach:

$newCollection = [];
foreach ($photos as $key => $value) {
      if ($value["is_lottery"] == 0) {
          unset($value["price"]);
          
      }
  array_push($newCollection,$value);

}

or you can try using forget to remove it from collection (not tested) from this ref: How to unset (remove) a collection element after fetching it?

Upvotes: 0

mmabdelgawad
mmabdelgawad

Reputation: 2545

You can do this

$json = '[
   {
       "id": "3",
       "title": "Boruto\'s Photo",
       "is_lottery": 1,
       "price": 10
    },
    {
       "id": "3",
       "title": "Misuki\'s Photo",
       "is_lottery": 0,
       "price": 20
   }

]';

$filtered = collect(json_decode($json, true))->map(function ($array) {
   if (!$array['is_lottery']) {
       unset($array['price']);
   }
   return $array;
});

For native PHP you can do

$data = json_decode($json, true);

foreach ($data as $index => $array) {
   if (!$array['is_lottery']) {
       unset($array['price']);
   }
   $data[$index] = $array;
}

Upvotes: 6

Related Questions