Skip to content
← Back to Snippets
Code

Data Quality Scorecard Snippet

Calculates a compact data quality scorecard for required fields, email format, and duplicate identifiers.

Purpose

Calculates a compact data quality scorecard for required fields, email format, and duplicate identifiers.

Snippet details

ContextArrayLevelAdvancedCopy-and-paste statusMarked safe after review.

Categories

  • Security

Code

<?php

/*
 * Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
 * Free for personal and internal use. Paid project use requires visible credit
 * to Jeffery L. Paris. Corporate use requires a paid license fee unless a
 * separate written license states otherwise.
 */

/**
 * Data Quality Scorecard Snippet.
 *
 * Purpose:
 * Reviews a small dataset and returns counts for missing required fields,
 * invalid email values, duplicate IDs, and an overall quality score.
 *
 * @param array $records Records to review.
 * @param array $required_fields Required field names.
 * @param string $id_field Field used as the duplicate identity key.
 * @return array Data quality scorecard.
 */
function ogSnippetDataQualityScorecardSnippet(array $records, array $required_fields, string $id_field): array {
	$total_records = count($records);
	$missing_required = 0;
	$invalid_email = 0;
	$duplicate_ids = 0;
	$seen_ids = array();

	foreach ($records as $record) {
		if (is_array($record) === false) {
			continue;
		}

		foreach ($required_fields as $field_name) {
			$clean_field = (string) $field_name;

			if ($clean_field !== '') {
				if (isset($record[$clean_field]) === false || trim((string) $record[$clean_field]) === '') {
					$missing_required++;
				}
			}
		}

		if (isset($record['email']) === true && trim((string) $record['email']) !== '') {
			if (filter_var($record['email'], FILTER_VALIDATE_EMAIL) === false) {
				$invalid_email++;
			}
		}

		if ($id_field !== '' && isset($record[$id_field]) === true) {
			$id_value = trim((string) $record[$id_field]);

			if ($id_value !== '') {
				if (isset($seen_ids[$id_value]) === true) {
					$duplicate_ids++;
				} else {
					$seen_ids[$id_value] = true;
				}
			}
		}
	}

	$issue_count = $missing_required + $invalid_email + $duplicate_ids;
	$score = 100;

	if ($total_records > 0) {
		$score = 100 - min(100, (int) round(($issue_count / $total_records) * 20));
	}

	return array(
		'total_records' => $total_records,
		'missing_required' => $missing_required,
		'invalid_email' => $invalid_email,
		'duplicate_ids' => $duplicate_ids,
		'score' => $score
	);
}

$records = array(
	array('crew_id' => 'SG-1', 'name' => 'Samantha Carter', 'email' => 'carter@example.test'),
	array('crew_id' => 'SG-1', 'name' => '', 'email' => 'not-an-email')
);
$scorecard = ogSnippetDataQualityScorecardSnippet($records, array('crew_id', 'name'), 'crew_id');

echo 'Stargate data quality score: '.$scorecard['score'];