Advent of code 2016/5
Ajax Direct

Answer

Part 1 :
Part 2 :
function solve($input)
{
    $i  = 0;
    $p1 = "";
    $p2 = [];
    while (count($p2) < 8) {
        while (true) {
            $i++;
            if (str_starts_with($md5 = md5($input . $i), "00000")) {
                $p1 .= $md5[5];
                if ($md5[5] < 8) $p2[(int) $md5[5]] = $p2[(int) $md5[5]] ?? $md5[6];
                break;
            }
        }
    }

    return [substr($p1, 0, 8), set($p2)->sortKeys()->values()->join("")];
}

[$solution_1, $solution_2] = solve($input);