De hecho ceil() redondea al entero inmediato superior, y round() lo hace al superior o inferior que esté más cercano. Si bien es cierto que con round() podemos definir un segundo parámetro de precisión que puede ser negativo y así redondear a decenas, centenas, etc., no podemos controlar que lo haga para arriba o para abajo. ceil() no tiene un parámetro de precisión.
Para lograr lo que deseas se me ocurren varias formas:
Primera, redondear usando round() y pasando como segundo parámetro -1. Si el número resultante fuese menor, entonces le sumamos 10.
Código PHP:
function redondear_a_10($valor) {
// Convertimos $valor a entero
$valor = intval($valor);
// Redondeamos al múltiplo de 10 más cercano
$n = round($valor, -1);
// Si el resultado $n es menor, quiere decir que redondeo hacia abajo
// por lo tanto sumamos 10. Si no, lo devolvemos así.
return $n < $valor ? $n + 10 : $n;
}
echo redondear_a_10(14); // 20
echo redondear_a_10(50); // 50
echo redondear_a_10(-98); // -90
Otra forma sería usando ceil() y un pequeño truco:
Código PHP:
function redondear_a_10($valor) {
// Convertimos $valor a entero
$valor = intval($valor);
// El truco que aplicamos consiste en dividir el entero entre 10
// de manera que obtendremos un número con un decimal.
// Eso sí puede ser redondeado hacia arriba con ceil().
// Finalmente multiplicamos por 10 para restaurar el formato
// original del número
return ceil($valor/10)*10;
}
echo redondear_a_10(14); // 20
echo redondear_a_10(50); // 50
echo redondear_a_10(-98); // -90
Otra solución es calcular el residuo de dividir el número entre 10, y conociendo eso completar hasta el siguiente 10:
Código PHP:
function redondear_a_10($valor) {
// Convertimos $valor a entero
$valor = intval($valor);
// Si es un múltiplo de 10 exacto, no hacemos nada.
if($valor % 10 == 0) return $valor;
// A $valor le sumamos lo que le falta para llegar al múltiplo
// de 10 siguiente
return $valor + (10 - ($valor % 10));
}
echo redondear_a_10(14); // 20
echo redondear_a_10(50); // 50
echo redondear_a_10(-98); // -80 !?
Esta última forma tiene un problema si se trata de números negativos. Si lo estudias te darás cuenta por qué.
Espero que no copies/pegues estas funciones sin mirarlas antes. Escribí este mensaje tan amplio para que sirva de referencia posterior.