문제

I am trying to manually sort a PHP array without making use of ksort.

This is how my code looks at the moment:

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;
        }
      }
    }
}

It doesn't sort, I can't figure out how to make it sort.

도움이 되었습니까?

해결책

You could try this:

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

I'm sorting the keys separately and then deleting the elements one-by-one and appending them to the end, in ascending order.

I'm using another sorting function (sort()), but if you want to eliminate all available sorting functions from your emulation, sort() is much easier to emulate. In fact, @crypticous's algorithm does just that!

다른 팁

This function return array in ASC. Take in consideration that I'm using goto which is supported in (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

PS. When I was studying php, I wrote this function and now remembered that I had it (that's why I really don't remember what I am doing in it, though fact is it's working properly and hopefully there are comments too), hope you'll enjoy :)

DEMO

I was checking some issue related to this post and i wanted to give my insight about it ! here's what i would have done to implement php's sort :

$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);

This code will display : Array ( [0] => 25 [1] => 45 [2] => 50 [3] => 98 )

Short and sweet

function custom_ksort($arg)
{
    $keys = array_keys($arg);

    sort($keys);

    foreach($keys as $newV)
    {
        $newArr[$newV] = $arg[$newV];
    }

    return $newArr;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top