def weighted_score_calculation(text, matrix):
    """
    Returns the weighted score for a string (text) based on a matrix of terms and associated
    weights (matrix).

    text - a string for which to calculate the weighted score.
    matrix - a 2D list of each [term, weight] from which to score.
    
    Returns each score and a list of terms found.
    """
    
    score = 0
    included_terms = []
    
    # Generate scores
    for item in matrix:
        value = text.lower().count(item[0].lower()) * float(item[1])
        score += value
        if value > 0:
            included_terms.append(item[0])
        
    return [score, included_terms]