标签:php
我这里有一个文件,其中包含数据库名称及其相应大小的列表.
现在,我要从最大到最小排序大小,以及数据库名称
应该在显示时进行.在这里使用PHP.
谁能帮我吗?
这是一个简单的代码:
$file_name = test.txt
$handle = @fopen($file_name, "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$data = explode(" ",$buffer);
echo $data[1]."\n";
}
fclose($handle);
}
文件看起来像这样:
DatabaseName 300 KB
注意:$data [1]包含大小.我应该将其放置在阵列上吗?数据库名称怎么样?
非常感谢您的回答. =)
解决方法:
首先,您需要构建一个具有可以实际排序的元素的数组,然后使用usort或类似的元素根据您的自定义条件执行排序.
//first build up an array of databases with a unified size in bytes, ensuring
//we account for those postfixes like KB,MB,and GB
$databases=array();
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$data = explode(" ",$buffer);
if (count($data)==3)
{
$size=$data[1];
switch ($data[2])
{
case 'KB': $size*=1024; break;
case 'MB': $size*=1024*1024; break;
case 'GB': $size*=1024*1024*1024; break;
}
$data[3]=$size;
$databases[]=$data;
}
else
{
die("Bad line in file: $buffer");
}
}
现在使用自定义比较功能排序,以根据计算出的大小从高到低排序:
function cmp($a, $b)
{
if ($a[3] == $b[3]) {
return 0;
}
return ($a[3] < $b[3]) ? 1 : -1;
}
usort($databases, "cmp");
标签:php
来源: https://codeday.me/bug/20191024/1920507.html