Я не понимаю, почему, если в условие while вместо count($arr) написать $length, то будет бесконечный цикл?
Ведь это же тоже самое
$arr = [3,1,2,5,4];
$arr2 = [];
$length = count($arr);
while($length) {
foreach($arr as $k => $v) {
if($v == min($arr)) {
$arr2[] = $v;
unset($arr[$k]);
}
}
}
echo '<pre>';
print_r($arr2);
echo '</pre>';