在mysql_fetch_array里面的数组上排序

时间:2012-02-27 16:19:01

标签: php mysql arrays

我有一个从我的数据库中获取结果的PHP脚本。在mysql_fetch_array()我计算文件夹中服务器上的文件。我得到了mysql结果的文件夹名称。

我想要的是建立一个包含所有公司名称和相关文件夹中所有文件的列表。

好吧,到目前为止一切顺利。但问题是我想对整个文件列表进行排序。

我的脚本看起来像这样:

<? $query = "SELECT * FROM users WHERE id = '".$_COOKIE['users_id']."'"; $sql = mysql_query("$query");
while ($fill = mysql_fetch_array($sql)) { 
   $multi_user = $fill['multi_user'];
   $folder = $fill['folder'];
   $company_name = $fill['company_name'];

   $directory_purchase = '/var/www/vhosts/domain.nl/private/'.$folder.'/purchase/';
   $directory_sales = '/var/www/vhosts/domain.nl/private/'.$folder.'/sales/';
   $email_folder = '/var/www/vhosts/domain.nl/private/'.$folder.'/email/';
   $kas_folder = '/var/www/vhosts/domain.nl/private/'.$folder.'/bank/';
   $multi_folder = '/var/www/vhosts/domain.nl/private/'.$folder.'/multi/';

   $total_purchase = count(glob($directory_purchase."*.*"));
   $total_sales = count(glob($directory_sales."*.*"));
   $total_email = count(glob($email_folder."*.*"));
   $total_kas = count(glob($kas_folder."*.*"));
   $total_multi = count(glob($multi_folder."*.*"));

   $total = $total_purchase + $total_sales + $total_email + $total_kas + $total_multi;

   echo '<table>
     <tr>
         <td>'. $company_name. '</td>
         <td>'. $total .'</td>
     </tr>
   </table>';
}?>

有人知道怎么做吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

嗯......只需创建一个数组并在循环中填充它。然后对数组进行排序并再次循环。此外,您需要缓存公司名称:

<?
$totals = array();
$companies = array();
$query = "SELECT * FROM users WHERE id = '".$_COOKIE['users_id']."'";
$sql = mysql_query("$query");
while ($fill = mysql_fetch_array($sql)) { 
   // all the other stuff

   $total = $total_purchase + $total_sales + $total_email + $total_kas + $total_multi;
   $totals[$fill['id']] = $total;
   $companies[$fill['id']] = $fill['company_name']; 
}
asort($totals);
foreach ($totals as $company => $total) {
    echo $companies[$company] . ': ' . $total . '<br />';
}
?>

显然你也可以将所有信息放到一个单独的数组中并使用usort(),但在我的选择中,这有点过分。

答案 1 :(得分:0)

您应该考虑在MySql内对数据进行排序。如果你真的需要在PHP中使用usort函数(用户排序):

http://www.php.net/manual/en/function.usort.php

usort功能必须采用两个参数(比较项目)并返回-101如果item1为“更少”,“相等”或“大于”item2

示例:

$mydata = ... // some data

usort( $mydata, function($item1,$item2){
    // your sort logic
    return $item1['column1'] > $item2['columns1']; //simple numeric sort
}); 

考虑到您的示例,您可能希望按字符串值对项目进行排序。在这种情况下,排序逻辑使用str_cmp来查看哪个项目与另一个数据数组相比更大:

http://php.net/manual/en/function.strcmp.php

示例:

usort( $mydata, function($item1,$item2){
    // your sort logic
    return str_cmp($item1['folder'], $item2['folder']); //string sort
}); 

希望这会有所帮助......