3v4l.org

run code in 300+ PHP versions simultaneously
<?php $subjectSlots = [ "tamil" => [1, 2, 3, 4, 5], "english" => [4, 5, 6], "maths" => [1, 5, 8], "social" => [1, 2, 5], "pt" => [1], "hindi" => [3, 4, 7] ]; $requiredSubjects = ['tamil', 'tamil', 'pt', 'maths', 'maths', 'social', 'hindi', 'english']; usort($requiredSubjects, function($a, $b) use ($subjectSlots) { return $subjectSlots[$a] <=> $subjectSlots[$b]; // sort by length, then by values }); function fillSlots($requiredSubjects, $availableSlots, $filledSlots = []) { if (!$requiredSubjects) { ksort($filledSlots); return $filledSlots; } foreach ($requiredSubjects as $rIndex => $subject) { foreach ($availableSlots[$subject] as $sIndex => $slot) { if (!isset($filledSlots[$slot])) { unset($requiredSubjects[$rIndex], $availableSlots[$subject][$sIndex]); $result = fillSlots( $requiredSubjects, $availableSlots, array_replace($filledSlots, [$slot => $subject]) ); if ($result) { return $result; } } } } } var_export(fillSlots($requiredSubjects, $subjectSlots));

preferences:
27.36 ms | 407 KiB | 5 Q