• 28-09-2022, 11:40:05
    #1
    Bir dizi düşünün;

    Array
    (
        [4] => Array
        (
          [data] => 90
        )
        [12] => Array
        (
          [data] => 100
        )
    )
    dizide değerler bu şekilde diyelim.
    Bu dizide, bu data değerlerine göre diziyi nasıl sıralarım?

    3 numaralı indis yukarıda, 4 numaları indis aşağıda olmalı istenen formata göre. Yanlış anlamayın, 4 ve 12 indislerine göre değil, " data " değerine göre sıralamak istiyorum
  • 28-09-2022, 11:50:27
    #2
    YazilimciBiri adlı üyeden alıntı: mesajı görüntüle
    Bir dizi düşünün;

    Array
    (
        [4] => Array
        (
          [data] => 90
        )
        [12] => Array
        (
          [data] => 100
        )
    )
    dizide değerler bu şekilde diyelim.
    Bu dizide, bu data değerlerine göre diziyi nasıl sıralarım?

    3 numaralı indis yukarıda, 4 numaları indis aşağıda olmalı istenen formata göre. Yanlış anlamayın, 4 ve 12 indislerine göre değil, " data " değerine göre sıralamak istiyorum

    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;
    
    }
    
    $sonuc = array_msort($dizi, array('data'=>SORT_DESC));
  • 28-09-2022, 11:51:27
    #3
    Hayko adlı üyeden alıntı: mesajı görüntüle
    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;
    
    }
    
    $sonuc = array_msort($dizi, array('data'=>SORT_DESC));
    Bir çözüm buldum hocam, deniyorum çözemezsem deneyebilirim bunu. Teşekkürler.
  • 28-09-2022, 11:57:17
    #4
    YazilimciBiri adlı üyeden alıntı: mesajı görüntüle
    Bir çözüm buldum hocam, deniyorum olmazsa deneyeceğim bunu. Teşekkürler.
    Bulduğunuz çözüm nasıl bilmiyorum fakat aşağıdaki kod işe yarıyor ve kısa.
    Aşağıdaki büyükten küçüğe sıralar, küçükten büyüğe için > kullanabilirsiniz.
    usort($data, function($a, $b) {
        return $a['data'] < $b['data'];
    });
  • 28-09-2022, 12:26:38
    #5
    mustafabosnak adlı üyeden alıntı: mesajı görüntüle
    Bulduğunuz çözüm nasıl bilmiyorum fakat aşağıdaki kod işe yarıyor ve kısa.
    Aşağıdaki büyükten küçüğe sıralar, küçükten büyüğe için > kullanabilirsiniz.
    usort($data, function($a, $b) {
        return $a['data'] < $b['data'];
    });
    Çözdüm hocam, teşekkür ederim yine.