按排序排序的PHP数组
问题描述:
我的代码在这里:我尝试使用排序功能,但没有成功。这是我的工作阵列码:按排序排序的PHP数组
我的代码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";
答
也许你可以尝试使用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
的每个数组只有一个元素。
答
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);
如何在代码中使用 – 2014-10-30 18:53:21
我在PHP是初学者 – 2014-10-30 18:53:45
呵呵,我是你已经在使用的sort()函数的印象。我会更新我的答案。 – Paul 2014-10-30 18:54:22