нужно заменить символ эмодзи (⚡) на X.Предлагаю четче формулировать вопрос. Для замены любого эмодзи, нужно перечислить все диапазоны, которые достаточно легко гуглятся.
$reg = '[\x{0080}-\x{02AF}\x{0300}-\x{03FF}\x{0600}-\x{06FF}\x{0C00}-\x{0C7F}\x{1DC0}-\x{1DFF}\x{1E00}-\x{1EFF}\x{2000}-\x{209F}\x{20D0}-\x{214F}\x{2190}-\x{23FF}\x{2460}-\x{25FF}\x{2600}-\x{27EF}\x{2900}-\x{29FF}\x{2B00}-\x{2BFF}\x{2C60}-\x{2C7F}\x{2E00}-\x{2E7F}\x{3000}-\x{303F}\x{A490}-\x{A4CF}\x{E000}-\x{F8FF}\x{FE00}-\x{FE0F}\x{FE30}-\x{FE4F}]';
preg_replace($reg, 'X', $str);
https://regex101.com/r/oXk4aP/1 и тогда всё по канонам DI , разве нет?Нет. В данном случае у вас объекты-сущности, отражающие какой-то тип реальных объектов (документов, пользователей, деревьев, трусов - не суть), для их взаимодействия не нужно как-то показывать им друг на друга, все взаимодействия между ними могут быть прописаны в коде, использующем их в качестве независимых единиц (хороший пример - код в контроллере, если вы понимаете концепцию MVC). DI же передает [сервисные] объекты, без которых сам объект будет либо не функционален (например та же БД для модели типа Active Record), либо обслуживающий код будет часто повторяться и есть смысл вынести их взаимодействие в метод объекта (если лень), или создать объект взаимодействия (что правильнее), как например при проверке ролей и прав в RBAC/ACL, но тут я не вижу никаких к тому предпосылок.
параметры имеются, не пустые , валидные, готовый json выдающий ошибку.ну, как минимум "costSale":14.039999999999999 не соответствует ожидаемому типу double, который у вас флоат...
{"Error":"Недопустимое значение для параметров article, brand, suppliername, costsale, quantity. Параметры не могут быть пустыми"}ну так что не понятно? проверяйте что попадает в эти поля, очевидно что какая-то лажа с отправляемыми данными.
вопрос в увеличении степени автоматизации. где она максимальна?Только смотреть под стек, думаю что людей которые работали с большим количеством таких штук под разные стеки просто нет, ну или их количество крайне мало и не пересекается с активом тостера. Так что как минимум указание стека сильно поможет. Под ту же лару вояджер настраивается весьма гибко, но не умеет в сложно связанные сущности, только один-ко-многим с указанием справочника... Ну или я не так глубоко копал. Пользовался на простеньком проекте, где нужно было править странички, но что-то свое с редактированием мутить было лень. Ищите под свой стек, читайте доки, другого особо и не посоветуешь...
Выходит, что сканировать все файлы придется в любом случае?Файлы в папке лежат не физически, а привязаны через (условно) соответствия папка-файл, вышепредставленная последовательность - условное отображение, которое к физическому размещению файлов на диске никакого отношения не имеет. То есть чтобы знать что лежит в папке, программе надо от ОС получить список файлов из данной папки и упорядочить его по какому-то признаку (в вашем случае по имени). Без полного списка это естественно сделать невозможно.
Сначала key = 0 потом 1 потом 2 потом опять 1 О_оЧто вас смущает? Там же 2 цикла, закончился первый, начался второй с новым массивом. Что мешает просмотреть весь массив $aTabs таким же образом - загадка.
а необходимо, я так понимаю, убрать отступ у всех предыдущих.Если внимательно читать задачи
почему то одна строка вылазит из общей структурыто лишней работы можно избежать. Внимательнее надо быть.
2) Что будет в соответствующем корневом объекте в свойстве parent?