sort associate array in PHP -


function mysort($arr) { ($i = 0; $i < count($arr); $i++) {     $j = $i;     while ($j > 0 && $arr[$j] < $arr[$j-1]) {         $tmp = $arr[$j-1];         $arr[$j-1] = $arr[$j];         $arr[$j] = $tmp;         $j--;     } }  return $arr; }  $array = array( 'a' => '1', 'f' => '3', 'g' => '5', 's' => '2', 'r' => '8'  ); $values = array_values($array);  $sorted = array(); foreach (mysort($values) $key=> $value) { $sorted[$value] = $array[$value]; }  print_r($sorted); 

i lost here. i'd sort array $array according values output

a = 1

s = 2

f = 3

g = 5

r = 8

however trying without using sort methods such asort, usort or ksort. own function.

this should work you:

here simple loop through elements of $array , save them sorted in $sorted. in first if statement check if either $sorted array empty or current element of $array bigger last element of sorted array. if true append element @ end $sorted array.

e.g. (pseudo code):

empty($sorted) || end($sorted) < current($array) 

otherwise i'll enter else part loop through $sorted array find spot current element of $sorted less current element of $array , next element of $sorted bigger current element of $array (so find spot current element of $array has go in between).

e.g (pseudo code):

current($sorted) < current($array) && next(current($sorted)) > current($array)  

and if case first cut off part current element of $sorted array , save in tmp variable. append current element $array , append part cut off again @ end of $sorted array.

<?php      $array = [             'a' => '1',             'r' => '8',             'g' => '5',             'f' => '3',             's' => '2',        ];      $sorted = [];     $keys = array_keys($array);       for($count = 0; $count < count($array); $count++) {          $tmpkeys = array_keys($sorted);         if(empty($sorted) || $sorted[$tmpkeys[count($sorted)-1]] < $array[$keys[$count]]) {             $sorted[$keys[$count]] = $array[$keys[$count]];         } else {              for($innercount = 0; $innercount < count($sorted)-1; $innercount++) {                  if($sorted[$tmpkeys[$innercount]] < $array[$keys[$count]] && $array[$keys[$count]] < $sorted[$tmpkeys[$innercount+1]]) {                     $tmp = array_splice($sorted, $innercount+1);                     $sorted[$keys[$count]] = $array[$keys[$count]];                     $sorted = array_merge($sorted, $tmp);                  }              }         }      }      print_r($array);     print_r($sorted);  ?> 

output:

array ( [a] => 1 [r] => 8 [g] => 5 [f] => 3 [s] => 2 ) array ( [a] => 1 [s] => 2 [f] => 3 [g] => 5 [r] => 8 ) 

Comments

Popular posts from this blog

c++ - Delete matches in OpenCV (Keypoints and descriptors) -

java - Could not locate OpenAL library -

sorting - opencl Bitonic sort with 64 bits keys -