Skip to content
← Back to Snippets
Code

Import Error Bucket Summary

Groups import row errors by field and message so a CSV or data-file import can report useful summaries.

Purpose

Groups import row errors by field and message so a CSV or data-file import can report useful summaries.

Snippet details

ContextFileLevelAdvancedCopy-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.
 */

/**
 * Import Error Bucket Summary.
 *
 * Purpose:
 * Converts row-level import errors into field and message buckets that are
 * easier to display after a file import dry run.
 *
 * @param array $row_errors List of row error arrays with row, field, and message keys.
 * @return array Error buckets and total error count.
 */
function ogSnippetImportErrorBucketSummary(array $row_errors): array {
	$field_buckets = array();
	$message_buckets = array();
	$total_errors = 0;

	foreach ($row_errors as $error) {
		$row_number = 0;
		$field_name = 'general';
		$message = 'Unknown import error.';

		if (isset($error['row']) === true) {
			$row_number = (int) $error['row'];
		}

		if (isset($error['field']) === true && trim((string) $error['field']) !== '') {
			$field_name = trim((string) $error['field']);
		}

		if (isset($error['message']) === true && trim((string) $error['message']) !== '') {
			$message = trim((string) $error['message']);
		}

		if (isset($field_buckets[$field_name]) === false) {
			$field_buckets[$field_name] = array('count' => 0, 'rows' => array());
		}

		if (isset($message_buckets[$message]) === false) {
			$message_buckets[$message] = 0;
		}

		$field_buckets[$field_name]['count']++;
		$field_buckets[$field_name]['rows'][] = $row_number;
		$message_buckets[$message]++;
		$total_errors++;
	}

	return array(
		'total_errors' => $total_errors,
		'field_buckets' => $field_buckets,
		'message_buckets' => $message_buckets
	);
}

$import_errors = array(
	array('row' => 7, 'field' => 'designation', 'message' => 'Designation is required.'),
	array('row' => 8, 'field' => 'designation', 'message' => 'Designation is required.'),
	array('row' => 9, 'field' => 'hive', 'message' => 'Hive value is unknown.')
);
$summary = ogSnippetImportErrorBucketSummary($import_errors);

echo 'Aliens import review found '.$summary['total_errors'].' errors.';