PHP’de Çok Boyutlu Dizileri Sıralamak

Filed in PHP | Programlama Leave a comment

PHP çok boyutlu dizileri sıralamak için array_multisort işlevi kullanılır. Elbette bu işlev tek satırda çalışmamakta öncesinde dizinin belirli bir biçime getirilmesi gerekiyor. O konunun detayına hiç girmeden php.net’deki şu arkadaşın yazmış olduğu işlev bu işlemi çok kolaylaştırıyor. Bu makale biraz üzümünü ye bağını sorma şeklinde oldu ama amerikayı yeniden keşfetmeye gerek yok :) gelelim işleve ve kullanımına;

function array_msort($array, $cols)
{
    $colarr = array();
    foreach ($cols as $col => $order) {
        $colarr[$col] = array();
        foreach ($array as $k => $row) { $colarr[$col][‘_’.$k] = strtolower($row[$col]); }
    }
    $eval = ‘array_multisort(‘;
    foreach ($cols as $col => $order) {
        $eval .= ‘$colarr[\''.$col.'\'],’.$order.‘,’;
    }
    $eval = substr($eval,0,-1).‘);’;
    eval($eval);
    $ret = array();
    foreach ($colarr as $col => $arr) {
        foreach ($arr as $k => $v) {
            $k = substr($k,1);
            if (!isset($ret[$k])) $ret[$k] = $array[$k];
            $ret[$k][$col] = $array[$k][$col];
        }
    }
    return $ret;
}
// Sıralanacak dizi tanımlanıyor
$arr1 = array(
    array(‘id’=>1,‘name’=>‘aA’,‘cat’=>‘cc’),
    array(‘id’=>2,‘name’=>‘aa’,‘cat’=>‘dd’),
    array(‘id’=>3,‘name’=>‘bb’,‘cat’=>‘cc’),
    array(‘id’=>4,‘name’=>‘bb’,‘cat’=>‘dd’)
);
// array_msort işlevi sıralama ölçütleri bir dizi şeklinde tanımlanarak çağırılıyor…
$arr2 = array_msort($arr1, array(‘name’=>SORT_DESC, ‘cat’=>SORT_ASC));

, , , ,

TOP