PHP数组以desc顺序排序

时间:2014-10-30 18:49:17

标签: php arrays sorting

我的代码在这里:我尝试使用排序功能,但没有成功。这是我的工作数组代码:

我的代码显示输出未排序顺序:

<?php

 foreach($aCities as $key=>$val)
 {
     foreach($diskspace[$val] as $key=>$val2)
     {
         if(isset($val2['data']))
         {
             //'MBytes %.f'=155.000000%;
             preg_match("/'(.*?)ytes \%.f'=(.*?)\%;/",$val2['data'],$aVal);
             echo($val.' '.ceil($aVal[2]).' '.$aVal[1].'<br />');
         }
     }
 }
?>

代码输出:

S 3 MB
T 6 MB
I 10 MB

我需要输出DESC(MemorySize)顺序,如:

I 10 MB
T 6  MB
S 3  MB

3 个答案:

答案 0 :(得分:0)

也许您可以尝试使用rsort()

修改

例如,如果您有一个数字数组$number_array = [1, 2, 3, 4]并使用函数rsort():rsort($number_array),则生成的数组将按此顺序显示值[5, 4, 3, 2, 1]

但是,对于您的示例,根据您的代码判断,看起来您可能最好使用usort()

您也可以将它用作闭包。

usort($diskspace, function($a, $b) { return $b[0]['data'] - $a[0]['data']; }

我会尝试类似上面的内容。如果没有自己测试,它应该返回一个数组数组,就像你从最高到最低的数据一样。 [0]实际上将比较每个数组的第一个元素的数据属性,这不应该是一个问题,因为组成$aCities的每个数组只有一个元素。

答案 1 :(得分:0)

 $out = array();

 foreach($diskspace as $key => $value) // parse original array
 {
     $row = array_values($value);
     $row = $row[0];
     preg_match('/=(\d+)\./', $row['data'], $match); // get numerical value
     // MB as you did not show what else can be    
     $out[] = array($key, $match[1] + 0, 'MB'); // convert $match[1] to integer 
 }

 uasort($out, function ($a, $b) {  // sort by the second column
    return $a[1] < $b[1] ? 1 : -1; 
 });

 foreach($out as $row) // output sorted data
    echo join(' ', $row) . "\n";

答案 2 :(得分:0)

usort($diskspace, function($a, $b) {
    $a = reset($a); $b = reset($b);
    $aVal = filter_var($a['data'], FILTER_SANITIZE_NUMBER_INT);
    $bVal = filter_var($b['data'], FILTER_SANITIZE_NUMBER_INT);
    if ($aVal == $bVal) {
        return 0;
    }
    else if ($aVal > $bVal) {
        return -1;
    }
    else {
        return 1;
    }
});

var_dump($diskspace);