Сделал функцию, которая сортирует числа по возрастанию, только она получилась костыльная. Я не знаю, что сделать с элементом, который оказался самым маленьким и я ему присвоил новое значение, потом после всей сортировки, удалил его. Если бы я удалил элемент, который нашёлся, то есть самое меньшее число, то массив укоротился бы и тогда условие while, больше нормально не сработало PHP: $massiv = [3,2,5,1,7,4,6,8,9,10,13,11,14,12, -1,0]; function minSort($arr, $newArr = []) { $length = count($arr) - 1; while(count($newArr)-1 < $length) { for($i = 0; $i <= $length; $i++) { if($arr[$i] == min($arr)) { $newArr[] = $arr[$i]; $arr[$i] = 99999999999; } } } while($newArr[count($newArr) - 1] == 99999999999) { unset($newArr[count($newArr) - 1]); } return $newArr; } echo '<pre>'; print_r(minSort($massiv)); echo '</pre>';
Если ты это делаешь в плане обучения,тогда попробуй реализовать QuickSort https://ru.wikipedia.org/wiki/Быстрая_сортировка
Обычно сортируют без создания нового массива, и используют один из алгоритмов перестановок. QuickSort - это как финальный аккорд, а по началу лучше какой-нибудь пузырёк реализовать
Я не понимаю, почему, если в условие while вместо count($arr) написать $length, то будет бесконечный цикл? Ведь это же тоже самое PHP: $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>';
А если логику включить? count($arr) считает количество элементов в массиве сейчас, поэтому если внутри цикла оно меняется, то при каждой проверке условия count будет разный. Если же ты до начала цикла записываешь количество элементов в массиве в переменную $length, то она будет хранить его, пока ты не изменишь именно её, а с количество элементов массива она больше прямой связи не имеет
Пытаюсь переделать foreach, на обычный for, сортируется но выскакивает много ошибок, как исправить? PHP: $arr = [3,1,2,5,4,0]; $arr2 = []; $len = count($arr); while(count($arr)) { for($i = 0; $i < $len; $i++) { if($arr[$i] == min($arr)) { $arr2[] = $arr[$i]; unset($arr[$i]); } } } echo '<pre>'; print_r($arr); echo '</pre>'; echo '<pre>'; print_r($arr2); echo '</pre>';