Update vs Insert logic but the last key is always inserted?

Ok here’s my altered function but this one doesn’t work at all but maybe you can see wher i go wrong

function insertUserShoppingMetaData($params) {
        global $wpdb;
        $shopping_meta_table="wp_shopping_metavalues";
        $wp_user_id = $params['wp_user_id'];
        $checkKeyValues = $wpdb->get_results("SELECT meta_shopping_key FROM $shopping_meta_table WHERE wp_user_id = '$wp_user_id'");
        //print_r($checkKeyValues);
        foreach ($params as $key => $val) {

            foreach($checkKeyValues as $check){
                //UPDATE OR INSERT
                if (($check->meta_shopping_key == $key) AND ($key != "wp_user_id")) {
                    if (is_array($val)) {
                        $val = json_encode($val);
                    }
                    $shopping_meta_values = array(
                        'wp_user_id' => $wp_user_id,
                        'meta_shopping_key' => $key,
                        'meta_shopping_value' => $val
                    );
                    $shopping_meta_where = array('meta_shopping_key' => $key, 'wp_user_id' => $wp_user_id);

                    $result = $wpdb->get_results("SELECT * FROM $shopping_meta_table WHERE meta_shopping_key = '" . $key . "' AND wp_user_id = '$wp_user_id'");
                    if (count($result) > 0) {//KEY ALREADY EXISTS FOR USER
                        $return = $wpdb->update($shopping_meta_table, array('meta_shopping_key' => $key, 'meta_shopping_value' => $val), $shopping_meta_where) . '<br/>';
                    } else {//KEY IS NEW
                        $return = $wpdb->insert($shopping_meta_table, $shopping_meta_values) . '<br/>';
                    }
                }//.end $key
                else {
                     //KEY IS NOT SELECTED ANYMORE SO DELETE key value pair row
                    $qdel = $wpdb->delete($shopping_meta_table,array('wp_user_id'=>$id));
                    $return = 'Deleted: '.$qdel;
                }//.end else {
            }//.end foreach checkKeyValue

        }//.end each
        echo 'Test return: ' . $return;
    }