public function addToCart($id){
$course = Course::findOrfail($id);
$user =Auth::user();
$cart_array = array();
$cart = $user->user_cart;
if ($cart == '') {
array_push($cart_array, array('user_cart' => $course->id));
// print_r($cart_array);
} else {
$founder = false;
$cart_array = json_decode($cart, true);
for ($i = 0; $i < count($cart_array); $i++) {
$cart_for_eacch_course = $cart_array[$i];
if ($cart_for_eacch_course['user_cart'] == $course->id) {
$founder = true;
}
}
if (!$founder) {
array_push($cart_array, array('user_cart' => $course->id));
}
}
$data['user_cart'] = json_encode($cart_array);
$update = User::where('id',$user->id)->update(['user_cart'=> $cart_array]);
Current Output
[{"user_cart":86},{"user_cart":84}]
Expected Output
[84,86]
Now I am having the current Output but I want expected one. I tried by removing the json_encode but it didn't work for me.
You can use array_column()
like so
$new_array = array_column($cart_array, 'user_cart');
When you are creating the output array, you are using...
array_push($cart_array, array('user_cart' => $course->id));
which is why you get the sub arrays with the keys. If instead you just add the $course->id
values, then this should build the output in the first place rather than having to process it further...
$cart_array[] = $course->id;
You would also need to change the line
if ($cart_for_eacch_course['user_cart'] == $course->id) {
to
if ($cart_for_eacch_course == $course->id) {
as you no longer have the sub index. You could change this part of the code to use in_array()
instead which would also be shorter.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.