Я бы проиндексировал первый массив по id (получится объект) и прошелся бы циклом по второму.
Если в первом объекте есть элемент с текущим id, проверить name. Если не совпадает - добавить в changed. Потом удалить элемент из объекта.
Если в первом объекте нет элемента с текущим id, добавить его в created.
Все, что останется в первом объекте после удалений, добавить в deleted.
ui_ux, мне не нравится gulp, мне не нравится webpack, мне... что? А, да! Мне вооПще ничего не нравится, сэр. Но на проекте мой предшественник настроил сборку именно так, а потом уволился. И сейчас все верстальщики пытаются собирать статику именно так. При этом, походу, она ни у кого не собирается, но периодически файло обновляется и никто не знает, почему. Я вот решил разобраться.
Роми, после создания объекта контроллера вызывается метод init() - там и можете установить что вам надо.
Впрочем, если очень хочется сделать именно через __construst(), в начале метода вызовите parent::__construst().
AgentSmith72, ну кудаparse_str($_GET, $query);? Как минимум, типы значений параметров функции не совпадают. Как максимум, можно сразу брать $_GET - это уже нужный массив.
А регулярки в цикле - это вообще извращение. Но если хочется - можно из $_SERVER['QUERY_STRING'] регуляркой удалить page и потом просто в конец строки дописывать нужный параметр.