简体   繁体   中英

how to remove the curly braces and user_cart string

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM