Skip to content

Array Rules

Array validation rules check array structure and content.

RuleParametersExampleError Message
array$v->rule('array', 'field'){field} must be an array
invalues$v->rule('in', 'field', ['a', 'b']){field} must be one of the allowed values
notInvalues$v->rule('notIn', 'field', ['x', 'y']){field} must not be one of the disallowed values
listContainsvalue, strict?$v->rule('listContains', 'field', 'val'){field} must contain {0}
subsetvalues$v->rule('subset', 'field', ['a', 'b']){field} must be a subset of the allowed values
containsUnique$v->rule('containsUnique', 'field'){field} must contain unique values
arrayHasKeyskeys$v->rule('arrayHasKeys', 'field', ['a']){field} must contain all required keys

Note: Parameters marked with ? are optional.

The strict parameter enables strict type comparison (===):

$v->rule('listContains', 'ids', '1'); // matches int 1
$v->rule('listContains', 'ids', '1', true); // doesn't match int 1

For associative arrays, checks keys not values.

Only checks key existence, not value validity.


Valicomb supports two syntax styles: rule-based (map rules to fields) and field-based (map fields to rules).

use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->rules([
'array' => [
['tags'],
['permissions']
],
'in' => [
['status', ['pending', 'approved', 'rejected']],
['priority', ['low', 'medium', 'high']]
],
'notIn' => [
['username', ['admin', 'root', 'system']],
['role', ['superadmin']]
],
'listContains' => [
['permissions', 'read'],
['tags', 'featured']
],
'subset' => [
['selected_colors', ['red', 'green', 'blue', 'yellow']],
['categories', ['tech', 'news', 'sports', 'entertainment']]
],
'containsUnique' => [
['tags'],
['email_recipients']
],
'arrayHasKeys' => [
['address', ['street', 'city', 'zip']],
['payment', ['method', 'amount']]
]
]);
$v->validate();
use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->mapManyFieldsToRules([
'status' => ['required', ['in', ['draft', 'published', 'archived']]],
'tags' => ['required', 'array', 'containsUnique', ['subset', ['php', 'javascript', 'python', 'go']]],
'permissions' => ['required', 'array', ['listContains', 'read']],
'username' => ['required', ['notIn', ['admin', 'root', 'moderator']]],
'address' => ['required', 'array', ['arrayHasKeys', ['street', 'city', 'country']]],
'categories' => ['optional', 'array', ['subset', ['tech', 'news', 'lifestyle']]]
]);
$v->validate();