Ребята, всем привет, может кто в курсе, есть ли какой-либо стандарт или библиотека на php (или другом языке), которая бы позволяла писать гибкие проверки соответствия набора данных некоторому условию? Например, есть массив: $collection = [[‘a’ => ‘1’], [‘a’ => 1], [‘a’ => 2]]; пишем примерно такое условие: $condition = "{{[{collection.group(‘a’)}].each()}.or()}.count()>1 || collection.count()>5"; которое будет означать: возьми коллекцию, сгруппируй ее по значениям элементов с ключом ‘a’, затем пройдись по каждому сгруппированому массиву (соединяя условия проверки по ИЛИ) и проверь количество массивов внутри каждого сгруппированого массива, если хотя бы по одному кол-во оказалось больше 1 или количество элементов в первоначальном массиве больше 5, то набор данных удовлетворяет условию. И выполняем проверку if ($checker->satisfies($condition, $collection)) {} В некоторых продуктах видел подобные правила, но не знаю это реализация какого-то стандарта или самопал.
в чем гибкость? Создании своего псевдо-языка для написания условий? нужно тогда будет описать все возможные варианты синтаксиса языка, потом как то разбирать парсить, обрабатывать итд P.S. Если коллекция берется из БД - тогда можно и нужно применять SQL ))))
Нет, о создании такого псевдо-языка речь не идет, вопрос в том, что может уже что-то подобное создано, т.к. видел в настройках некоторых продуктов очень похожие вещи, поэтому стало интересно может есть какой-либо стандарт или библиотека. А гибкость в том, что приходит набор данных (не из бд), и в зависимости от вида этого набора необходимо применять разные алгоритмы обработки, причем видов довольно много и писать кучу циклов и if'ов, чтобы понять какой алгоритм обработки применить, несколько неудобно, гораздо удобнее было бы описать несколько условий и сопоставить им методы обработки. Задач подобного рода возникает по ходу работы не мало.
Конкретно для валидации данных есть библиотеки https://github.com/RunnMe/Validation например. Что с ней делать дальше разберетесь сами. В фреймворке T4 (https://github.com/pr-of-it/t4) того же разработчика было нечто подобное.