Сортировка массива PHP без ksort

Я пытаюсь вручную отсортировать массив PHP без использования ksort.

Так выглядит мой код:

function my_ksort(&$arg){ foreach($arg as $key1 => $value1){ foreach($arg as $key2 => $value2){ if($key1 > $key2){ $aux = $value2; $arg[$key2] = $value1; $arg[$key1] = $aux; } } } } 

Это не сортировка, я не могу понять, как сделать ее сортировкой.

    Вы можете попробовать следующее:

     function my_ksort(&$arg) { $keys=array_keys($arg); sort($keys); foreach($keys as $key) { $val=$arg[$key]; unset($arg[$key]); $arg[$key]=$val; } } с function my_ksort(&$arg) { $keys=array_keys($arg); sort($keys); foreach($keys as $key) { $val=$arg[$key]; unset($arg[$key]); $arg[$key]=$val; } } 

    Я сортирую ключи отдельно, а затем удаляю элементы один за другим и добавляю их в конец в порядке возрастания.

    Я использую другую функцию сортировки ( sort() ), но если вы хотите исключить все доступные функции сортировки из своей эмуляции, sort() намного проще эмулировать. На самом деле алгоритм @ crypticous делает именно это!

    Эта функция возвращает массив в ASC. Примите во внимание, что я использую goto, который поддерживается (PHP 5 >= 5.3.0)

     function ascending_array($array){ if (!is_array($array)){ $array = explode(",", $array); } $new = array(); $flag = true; iter: $array = array_values($array); // recount array values with new offsets (isset($min["max"])) ? $min["value"] = $min["max"] : $min["value"] = $array[0]; $min["offset"] = 0; for ($i=0;$i<count($array);$i++){ if ($array[$i] < $min["value"]){ // redefine min values each time if statement executed $min["value"] = $array[$i]; $min["offset"] = $i; } if ($flag){ // execute only first time if ($array[$i] > $min["value"]){ // define max value from array $min["max"] = $array[$i]; } $flag = false; } if ($i === (count($array)-1)){ // last array element array_push($new,$min["value"]); unset($array[$min["offset"]]); } } if (count($array)!=0){ goto iter; } print_r($new); } $arr = array(50,25,98,45); ascending_array($arr); // 25 45 50 98 с function ascending_array($array){ if (!is_array($array)){ $array = explode(",", $array); } $new = array(); $flag = true; iter: $array = array_values($array); // recount array values with new offsets (isset($min["max"])) ? $min["value"] = $min["max"] : $min["value"] = $array[0]; $min["offset"] = 0; for ($i=0;$i<count($array);$i++){ if ($array[$i] < $min["value"]){ // redefine min values each time if statement executed $min["value"] = $array[$i]; $min["offset"] = $i; } if ($flag){ // execute only first time if ($array[$i] > $min["value"]){ // define max value from array $min["max"] = $array[$i]; } $flag = false; } if ($i === (count($array)-1)){ // last array element array_push($new,$min["value"]); unset($array[$min["offset"]]); } } if (count($array)!=0){ goto iter; } print_r($new); } $arr = array(50,25,98,45); ascending_array($arr); // 25 45 50 98 

    PS. Когда я изучал php , я написал эту функцию и теперь вспомнил, что у меня ее есть (поэтому я действительно не помню, что я делаю в ней, хотя факт, что она работает правильно и, надеюсь, есть комментарии тоже), надеюсь, понравится 🙂

    DEMO

    Я проверял некоторые проблемы, связанные с этим сообщением, и я хотел рассказать об этом! вот что я бы сделал, чтобы реализовать сортировку php:

     $array_res = array(); $array = array(50,25,98,45); $i=0; $temp = $array[0]; $key = array_search($temp, $array); while ($i<count($array)-1){ $temp = $array[0]; for($n=0;$n<count($array) ;$n++) { if($array[$n]< $temp && $array[$n] != -1 ) { $temp = $array[$n]; } else{continue;} } //get the index for later deletion $key = array_search($temp, $array); array_push($array_res, $temp); /// flag on those which were ordered $array[$key] =-1; $i++; } // lastly append the highest number for($n=0;$n<count($array) ;$n++) { if ($array[$n] != -1) array_push($array_res, $array[$n]); } // display the results print_r($array_res); 

    Этот код отобразит: Массив ([0] => 25 [1] => 45 [2] => 50 [3] => 98)

    Похоже, ваша проблема в том, что вы меняете «временные» символы $key1 и $key2 но не массивы. Вы должны изменить $arg , а не только $key1 и $key2 . Попробуйте что-нибудь вроде:

     $arr = Array(3=>"a",7=>"b"); print_r( $arr ); foreach( $arr as $k=>$v ){ unset($arr[$k]); $arr[$k+1] = $v; } print_r($arr); с $arr = Array(3=>"a",7=>"b"); print_r( $arr ); foreach( $arr as $k=>$v ){ unset($arr[$k]); $arr[$k+1] = $v; } print_r($arr);