Contact | Programmeertips

Sorteer 2-dimensionale array op een key uit de 2e dimensie


public static function sortTwodimArrayByKey($array, $key_to_sort_with, $dir='ASC', $case_sensitive=false) {

        foreach($array as $key=>$val) {
            $values[] = $val[$key_to_sort_with];
        }

        if($case_sensitive) {
            sort($values);
        } else {
            natcasesort($values);
        }

        foreach($values as $value) {

            foreach($array as $key=>$val) {
                 if($value == $val[$key_to_sort_with]) {
                       $result_array[] = $array[$key];
                       unset ($array[$key]);
                  }
            }
        }
        if($dir == 'DESC') {
            $result_array = array_reverse($result_array);
        }
        return $result_array;
    }

}


Voorbeeld:
$twodim_array = array(    array('id'=>8,  'naam'=>'Paul',  'kado'=>'auto'),
                                    array('id'=>8,  'naam'=>'Peter', 'kado'=>'pc'),
                                    array('id'=>10, 'naam'=>'Kees',  'kado'=>'tol'),
                                    array('id'=>6,  'naam'=>'Jan',   'kado'=>'huis'),
                                    array('id'=>4,  'naam'=>'Piet',  'kado'=>'tv') );

Gebruik:
$arr_sorted = Arrayfunction::sortTwodimArrayByKey($twodim_array, 'id');
27-06-2009 : sorteerrichting toegevoegd

resultaat-array:
$result_array = array(   array('id'=>4,  'naam'=>'Piet',  'kado'=>'tv'),
                                 array('id'=>6,  'naam'=>'Jan',   'kado'=>'huis'),
                                 array('id'=>8,  'naam'=>'Paul',  'kado'=>'auto'),
                                 array('id'=>8,  'naam'=>'Peter', 'kado'=>'pc'),
                                 array('id'=>10, 'naam'=>'Kees',  'kado'=>'tol') );

Gebruik:
$arr_sorted = Arrayfunction::sortTwodimArrayByKey($twodim_array, 'naam');

resultaat-array:
$result_array = array(   array('id'=>6,  'naam'=>'Jan',   'kado'=>'huis'),
                                 array('id'=>10, 'naam'=>'Kees',  'kado'=>'tol'),
                                 array('id'=>8,  'naam'=>'Paul',  'kado'=>'auto'),
                                 array('id'=>8,  'naam'=>'Peter', 'kado'=>'pc'),
                                 array('id'=>4,  'naam'=>'Piet',  'kado'=>'tv') );
                                
                                




PHP heeft ook een kant en klare functie die nog verder gaat. usort.

function cmp($a, $b) {
     if ($a == $b) {
          return 0;
     }

     if($_SESSION['dir'] == 'ASC') {
          return ($a < $b) ? -1 : 1;
     } else {
          return ($a < $b) ? 1 : -1;
     }
}


function sortMultiDimArrayByKeys($twodim_array, $dir='ASC') {
     $_SESSION['dir'] = $dir;

     usort($twodim_array, 'cmp');

     return $twodim_array;
}


$twodim_array = sortMultiDimArrayByKeys($twodim_array, 'DESC');

Reactie *
Naam *