$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];
usort(
    $arr,
    function (int $a, int $b): int {
        $result = (($a - 1) % 6) - (($b - 1) % 6);
        return $result === 0 ? $a - $b : $result;
    }
);
print_r($arr);
/* Array
(
    [0] => 1
    [1] => 7
    [2] => 13
    [3] => 2
    [4] => 8
    [5] => 14
    [6] => 3
    [7] => 9
    [8] => 15
    [9] => 4
    [10] => 10
    [11] => 16
    [12] => 5
    [13] => 11
    [14] => 17
    [15] => 6
    [16] => 12
    [17] => 18
) */      oldArray.sort((a, b) => a.id - b.id);
newArray.sort((a, b) => a.id - b.id);
oldIdx = 0;
newIdx = 0;
while (oldIdx < oldArray.length || newIdx < newArray.length) {
  if (oldIdx >= oldArray.length || oldArray[oldIdx].id > newArray[newIdx].id) {
    console.log(`Added id newArray[newIdx].id`);
    newIdx += 1;
    continue;
  }
  if (newIdx >= newArray.length || oldArray[oldIdx].id < newArray[newIdx].id) {
    console.log(`Deleted id oldArray[oldIdx].id`);
    oldIdx += 1;
    continue;
  }
  if (oldArray[oldIdx].x !== newArray[newIdx].x) {
    console.log(`Changed id newArray[newIdx].id`);
    oldIdx += 1;
    newIdx += 1;
  }
}      
      SELECT `d`.`generation_id`, `d`.`Name`, `d`.`volume`, `d`.`capacity`,
       `d`.`type_of_connector`, COUNT(DISTINCT `c`.`color_id`) AS `color_count`
  FROM `device` AS `d`
  JOIN `device2color_body` AS `c` ON `c`.`device_id` = `d`.`id`
  GROUP BY `d`.`generation_id`, `d`.`Name`, `d`.`volume`, `d`.`capacity`,
           `d`.`type_of_connector`SELECT `generation_id`, `Name`, COUNT(*) AS `count`
  FROM (
    SELECT DISTINCT `d`.`generation_id`, `d`.`Name`, `d`.`volume`, `d`.`capacity`,
           `d`.`type_of_connector`, `c`.`color_id`
      FROM `device` AS `d`
      JOIN `device2color_body` AS `c` ON `c`.`device_id` = `d`.`id`
  ) AS `t`
  GROUP BY `generation_id`, `Name`      object(Test)#1 (2) {
  ["name":"Test":private]=>
  string(16) "Васенька"
  ["age"]=>
  int(43)
}class Test#1 (2) {
  private $name =>
  string(16) "Васенька"
  public $age =>
  int(43)
}