Claro, aquí está la solución:
Código PHP:
<?php
$flag = "";
$numero = 14725; //Valor de la DB
$array = array(16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1); //Estados
for($i=0; $i<=sizeof($array); $i++){
if($array[$i] < $numero){//se calcula que el array sea menor al numero
$total[$i] = $array[$i];
echo $total[$i];
echo '<br>';
$flag = TRUE; //bandera para restar
}
elseif($array[$i] == $numero){ //se calcula el numero final
$total[$i] = $array[$i];
echo $total[$i];
echo '<br>';
break;
}
if($flag==TRUE){ //Se resta el numero
$numero = $numero - $array[$i];
$flag=FALSE;
}
}
?>
Al ingresar el valor '14725' en la variable $numero está devolviendo:
Código:
8192
4096
2048
256
128
4
1
Y como el valor de $numero lo estoy tomando de una base de datos que ya está con los valores definidos, siempre se mostrarán los valores correctos.
Saludos~