Perfecto.
Enhorabuena, has sido la primera persona en resolver el reto

Si no te importa colocaré también mi propia explicación del código para aportar algo más al tema.
SOLUCIÓN:
<?php
$num = (!$_GET['valor']) ? -42 : -47;
/** El codigo comienza aquí, dijimos que entrariamos al archivo con ?valor=TRUE, así que la variable $_GET['valor'] será true, sin embargo, el ! de delante cambia el valor por false, así que la variable $num queda definida como -47 **/
if($num % 3 == 0) $num -= 3;
else $num += 8;
/** Para empezar, % es un operador que realiza la operación y devuelve el resto, por lo tanto, el condicional quiere decir: Si el resto al dividir $num entre 3 da como resultado es 0... Nuestro numero es -47. Si conoces las reglas de divisibilidad matemáticas sabrás que 47 no es divisible entre 3 porque 7 + 4 no es multiplo de 3, y por lo tanto el resto es distinto de 0, y a la variable se le suma 8. Por lo tanto $num ahora vale -39 **/
/** Comenzamos con el bucle, esta es la única parte mas complicada de todo el código. Para empezar observamos que definimos $i como 0, y el condicional que lo opera es $i < abs($num). abs() es una función que halla el valor absoluto del numero. Por lo tanto, si el numero es -45, quedará como 45. También podemos observar que en cada iteración del bucle a la variable $i se le suma 1 unidad **/
for($i=0;$i<abs($num);$i++) {
/** Como bien ha dicho Tope, este while es de pega, pues siempre se va a ejecutar una única vez, si eliminamos esta línea, la línea de break y el } de justo debajo, el
resultado del código sería el mismo **/
while(TRUE) {
$num -= -2; // Observamos que en cada iteración se le SUMAN (Ten en cuenta que menos por menos es mas) 2 unidades a la variable $num.
break;
}
}
/** Bien, como sabemos, en cada iteración se le suma una unidad a la variable $i, y dos unidades a la variable $num, por lo tanto, deducimos que nuestro condicional esta 3 unidades mas cerca de ser cumplido en cada iteración del bucle. Antes de comenzar el bucle la variable $i vale 0 y la variable $num -39 (Quedando como valor absoluto 39). Vamos a suponer que la linea que suma 2 unidades a la variable $num no existe, y la variable $i se sigue incrementando en 1 unidad cada iteracion ¿Cuantas iteraciones deberia dar el bucle para ser terminado? Exactamente, 39 iteraciones. Pero no es así, esa linea existe y por lo tanto ademas de añadir una unidad a $i, añade otras dos mas a $num. Esto es equivalente a añadir 3 unidades a $i, por lo tanto, el numero de iteraciones que tiene que realizar es: 39/3 = 13 iteraciones.
Si el bucle tiene que hacer 13 iteraciones para terminar, y en cada iteracion se le suma a la variable $num 2 unidades: 13*2 = 26 unidades sumadas en total, así que el numero que buscamos será -39+26=-13.
**/
echo $num;
?>
Espero que se entienda,
Saludos