IDataErrorInfo
не поддерживает множественные ошибки проверки для каждого свойства. Новый интерфейс INotifyDataErrorInfo , который был представлен в .NET Framework 4.5, делает.
Существует пример того, как реализовать это доступно здесь .
Вы можете использовать ItemsControl
для отображения сообщений об ошибках. Пожалуйста, посмотрите мой ответ здесь для примера.
Вы можете использовать стандартную библиотеку PHP (SPL) , чтобы «скрыть» рекурсию.
$a = array(1,2,array(3,4, array(5,6,7), 8), 9);
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($a));
foreach($it as $v) {
echo $v, " ";
}
выводит
1 2 3 4 5 6 7 8 9
Это может быть достигнуто при помощи array_walk_recursive
$a = array(1,2,array(3,4, array(5,6,7), 8), 9);
array_walk_recursive($a, function($v) use (&$r){$r[]=$v;});
print_r($r);
Рабочий пример:- https://3v4l.org/FpIrG
Использует рекурсию. Надеюсь, увидев, насколько это несложно, ваш страх рекурсии рассеется, как только вы увидите, насколько это несложно.
function flatten($array) {
if (!is_array($array)) {
// nothing to do if it's not an array
return array($array);
}
$result = array();
foreach ($array as $value) {
// explode the sub-array, and add the parts
$result = array_merge($result, flatten($value));
}
return $result;
}
$arr = array('foo', array('nobody', 'expects', array('another', 'level'), 'the', 'Spanish', 'Inquisition'), 'bar');
echo '<ul>';
foreach (flatten($arr) as $value) {
echo '<li>', $value, '</li>';
}
echo '<ul>';
Вывод:
<ul><li>foo</li><li>nobody</li><li>expects</li><li>another</li><li>level</li><li>the</li><li>Spanish</li><li>Inquisition</li><li>bar</li><ul>
As из PHP 5.3 , самое короткое решение, кажется, array_walk_recursive ()
с новым синтаксисом замыканий:
function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
Это решение нерекурсивное. Обратите внимание, что порядок элементов будет несколько смешанным.
function flatten($array) {
$return = array();
while(count($array)) {
$value = array_shift($array);
if(is_array($value))
foreach($value as $sub)
$array[] = $sub;
else
$return[] = $value;
}
return $return;
}