мой код здесь: я пытаюсь использовать функцию сортировки, но не успех. это мой рабочий массив:
Выходной код MY code 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
$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";
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);
Возможно, вы можете попробовать использовать 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
имеет только один элемент.