function buildTree($data) {
$tree = []; // Результирующее дерево
$stack = []; // Стек для отслеживания предыдущих уровней
foreach ($data as $item) {
$node = &$tree;
// Удаляем из стека элементы с уровнем глубже текущего
while (!empty($stack) && $stack[count($stack) - 1]['DEPTH_LEVEL'] >= $item['DEPTH_LEVEL']) {
array_pop($stack);
}
// Переходим по уровням для поиска нужного места в дереве
foreach ($stack as $ancestor) {
$node = &$node[$ancestor['INDEX']]['CHILDREN'];
}
// Добавляем текущий элемент в дерево
$node[] = [
'ID' => $item['ID'],
'NAME' => $item['NAME']
];
// Запоминаем текущий уровень и индекс для последующих элементов
$stack[] = [
'INDEX' => count($node) - 1,
'DEPTH_LEVEL' => $item['DEPTH_LEVEL'],
];
}
return $tree;
}
а вообще, там функции одно и то же делают, значения лишь разные, поэтому можно это всё в отдельную функцию оформить, ну или вообще в цикл
public static function update($file, $key, $newValue)
{
rewind($file);
$recordKey = "";
while (($line = fgets($file)) !== false) {
$recordKey = explode(':', $line)[0];
if ($recordKey == $key) {
fseek($file, 0); //тут целенаправленно указал начало файла, но все равно не работает
fwrite($file, "$key:$newValue");
break;
}
}
}
1) Вызывается метод (тратится процессорное время и память)
2) В него передается переменная (тратится дополнительная память)
3) Внутри метода обрабатывается условие-проверка переменной
При этом метод с переменной вызывается абсолютно для всех заказов, в том числе не тестовых, которых большинство.