Laravel- 如何从集合中删除密钥?

Laravel- How to Remove a key from collection?

我有如下数据:

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

    ]

我想过滤 is_lottery == false 从此集合中删除价格键。输出为:

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

    ]

你可以做到

$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;
});

对于原生 PHP 你可以做到

$data = json_decode($json, true);

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

您可以将名为 $newCollection 的新变量声明为最终集合。使用 foreach() 迭代您的集合,然后使用 unset() 从集合中删除 is_lottery,然后将其推送到 $newCollection,这是您如何使用 foreach 删除它的示例:

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

}

或者您可以尝试使用 forget 将其从该参考文献的集合(未测试)中删除:

$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;
});