2014-10-30 5 views
2

мой код здесь: я пытаюсь использовать функцию сортировки, но не успех. это мой код рабочего массива:PHP array out сортировать по убыванию

МОЕГО код desplay выхода не сортируются порядок:

<?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 

ответ

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"; 
0

Возможно, вы сможете попробовать rsort()?

EDIT

Например, если у вас есть массив чисел $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, имеет только один элемент.

+0

как можно использовать в этом коде –

+0

я новичок в PHP –

+0

О, я был под впечатлением, вы уже с помощью функции сортировки(). Я уточню свой ответ. – Paul

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);