mmm Empecé a hacer el ejercicio pero planteé mal tus variables me parece. Lo siento, no las entendía. Te dejo el código que me ha quedado a ver si te sirve de ayuda. Cualquier duda dime.
Código PHP:
Ver original<?php
// Cantidad de personas, obtenido de un formulario por ejemplo.
$guests = 10;
// Número de la habitación - Capacidad
'hab1' => 3,
'hab2' => 3,
'hab3' => 4,
'hab4' => 2
);
// Ordenamos las habitaciones por tamaño.
// Bucle.
// Comprobamos las habitaciones de mayor a menor capacidad.
// Si el tamaño es menor al número de huéspedes se asignan a
// esa habitación hasta llenarla y se procede con la siguiente en orden.
$selectedRooms = array(); foreach ( $rooms as $key => $value )
{
if ( $guests >= $value )
{
$guests -= $value;
$selectedRooms[] = $key;
}
}
// Comprobamos si queda algún huésped sin habitación.
if ( $guests != 0 )
{
echo 'Lo sentimos, pero no se pueden acoger a todos los huéspedes en nuestro hotel.';
}
else
{
echo 'Las habitaciones que se les han asignado son las siguientes: ' . implode(', ', $selectedRooms); }
?>
Saludos.
EDITO: por lo que se ve @xerifandtomas se me ha adelantado respondiendo mientras preparada la movida ;P Creo que en su post se refiere a lo mismo que he hecho en mi código.