Description

If you create an element that represents an array and configure a validator, then isValid() will run the validators on each of the values.

Problem 1: array_merge() is used to concatenate messages and errors
If two values have the same error (but a different message), then entries in $messages will be overwritten, since the key (error) is the same.

Problem 2:
Information about which of the values caused which message/error is lost, so it's impossible to render the error message next to the individual values.

Background:
I ran into this bug(1)/limitation(2) when working on a decorator which would replace ViewHelper and allow rendering of ANY element as an array (with the help of some javascript). For example, you could add a "text" element and set isArray and the decorator would render it as a series of text inputs with the user having an option to remove any of them or add new ones.

Suggestion:
Keep errors and messages in a separate array for each of the values, e.g.:
array(
[0] => array(
[errors] => same as now,
[messages] => same as now,
),
[1] => array(
[errors] => same as now,
[messages] => same as now,
),
)

Then to maintain backwards compatibility and simplicity merge them on the call to getMessages()/getErrors(). Additionaly add methods like getMessagesForValue($index)/getErrorsForValue($index).