respect-validation/docs/validators/Each.md
Henrique Moody 7db3bea8a6
Enhance LintSpdxCommand with contributor tracking and header normalization
Improves SPDX header linting to ensure consistent license metadata across
the codebase.

Key changes:

- Enforce deterministic tag ordering (License-Identifier, FileCopyrightText,
  FileContributor) to ensure consistency, prevent merge conflicts, and
  simplify code reviews

- Add contributor alias mapping to consolidate contributors with multiple
  emails or name variations (e.g., "nickl-" → "Nick Lombard")

- Add --contributions-strategy option with "blame" (current code authors)
  and "log" (all historical contributors) to support different attribution
  philosophies

- Add optional path argument to lint specific files or directories

- Add --fix option to automatically correct header issues

Assisted-by: Claude Code (claude-opus-4-5-20251101)
2026-02-03 15:23:20 +01:00

2.8 KiB

Each

  • Each(Validator $validator)

Validates whether each value in the input is valid according to another validator.

$releaseDates = [
    'validation' => '2010-01-01',
    'template'   => '2011-01-01',
    'relational' => '2011-02-05',
];

v::each(v::dateTime())->assert($releaseDates);
// Validation passes successfully

This validator is similar to All, but while All displays a single message generic to all failed entries, Each will display a message for each failed entry instead.

v::each(v::startsWith('2010'))->assert($releaseDates);
// → - Each item in `["validation": "2010-01-01", "template": "2011-01-01", "relational": "2011-02-05"]` must be valid
// →   - `.template` must start with "2010"
// →   - `.relational` must start with "2010"

v::named('Release Dates', v::each(v::startsWith('2010')))->assert($releaseDates);
// → - Each item in Release Dates must be valid
// →   - `.template` must start with "2010"
// →   - `.relational` must start with "2010"

You can also validate array keys combining this validator with After:

v::after('array_keys', v::each(v::stringType()))->assert($releaseDates);
// Validation passes successfully

Note

This validator will pass if the input is empty. Use Length with [GreaterThan][GreaterThan.md] to perform a stricter check:

v::each(v::equals(10))->assert([]);
// Validation passes successfully

v::length(v::greaterThan(0))->each(v::equals(10))->assert([]);
// → The length of `[]` must be greater than 0

Templates

Each::TEMPLATE_STANDARD

Mode Template
default Each item in {{subject}} must be valid
inverted Each item in {{subject}} must be invalid

Template placeholders

Placeholder Description
subject The validated input or the custom validator name (if specified).

Categorization

  • Arrays
  • Nesting
  • Transformations

Changelog

Version Description
3.0.0 Rejected stdClass, non-iterables
2.0.0 Remove support for key validation
0.3.9 Created

See Also