我有一个数组。然后,我使用php unset方法从数组中仅删除了一个索引。然后,我在laravel会话中存储了新数组。
$GetCartItems = json_decode($request->SessionValue);
unset($GetCartItems->items[$request->ArrIndex]);
$request->session()->put('cart', $GetCartItems);
之后,我使用下面的代码从laravel会话中重试了该数组。现在它是stdClass类型的对象,而不是数组。但是,我想要一个数组。
$GetCartItems = Session::get('cart');
这是我想从laravel会议中得到的。
App\Cart {#282 ▼
+items: array:3 [▼
0 => array:6 [▼
"item_id" => "29"
"qty" => array:1 [▶]
"price" => "1235"
"size" => array:1 [▶]
"item" => App\Product {#283 ▶}
"produ" => array:1 [▶]
]
1 => array:6 [▶]
2 => array:6 [▶]
]
+totalQty: 3
+totalPrice: 3705
+count: 3
+ArrCount: 3
}
这是在删除带有元素的一个索引并存储在laravel会话中后得到的结果。
{#282 ▼
+"items": array:3 [▼
0 => {#283 ▼
+"item_id": "29"
+"qty": array:1 [▶]
+"price": "1235"
+"size": array:1 [▶]
+"item": {#284 ▶}
+"produ": array:1 [▶]
}
1 => {#286 ▶}
2 => {#290 ▶}
]
+"totalQty": 6
+"totalPrice": 7410
+"count": 6
+"ArrCount": 3
}
如何摆脱stdClass类型的对象并得到我想要的?
无论何时要将对象转换为数组,都可以使用toArray()
方法,如下所示:
$GetCartItems = Session::get('cart')->toArray();
在下面的行中,您将SessionValue转换为stdClass对象,因为json_decode将序列化的对象转换为stdClass
$GetCartItems = json_decode($request->SessionValue);
如果在第二个的json_decode参数中添加true,则将得到一个Array而不是stdClass
$GetCartItems = json_decode($request->SessionValue, true);
另一方面,没有简单的方法来获取带有json_encode的购物车实例,但是您可以尝试使用对象序列化https://www.php.net/manual/en/language.oop5.serialization.php
<?php
class Cart implements \Serializable
{
public $items;
public function __construct()
{
$this->items = [
1,2,3
];
}
public function serialize() {
return serialize($this->items);
}
public function unserialize($items) {
$this->items = unserialize($items);
}
}
这样,您将能够序列化对象并将其持久保存到会话中
<?php
$GetCartItems = unserialize($request->SessionValue);
unset($GetCartItems->items[$request->ArrIndex]);
$request->session()->put('cart', serialize(($GetCartItems));
下次尝试执行此操作
$GetCartItems = unserialize($request->SessionValue);
您将获得具有正确值的购物车实例:)