Php 在mysql\u fetch\u数组内的数组上排序

Php 在mysql\u fetch\u数组内的数组上排序,php,mysql,arrays,Php,Mysql,Arrays,我有一个小PHP脚本,可以从数据库中获取结果。在mysql\u fetch\u array()中,我将服务器上的文件计数到一个文件夹中。我得到MySQL结果的文件夹名 我想要的是建立一个包含所有companynames和关联文件夹中所有文件的列表 嗯,到目前为止还不错。但问题是我想按文件总数对列表进行排序 我的脚本如下所示: <? $query = "SELECT * FROM users WHERE id = '".$_COOKIE['users_id']."'"; $sql = mys

我有一个小PHP脚本,可以从数据库中获取结果。在
mysql\u fetch\u array()
中,我将服务器上的文件计数到一个文件夹中。我得到MySQL结果的文件夹名

我想要的是建立一个包含所有companynames和关联文件夹中所有文件的列表

嗯,到目前为止还不错。但问题是我想按文件总数对列表进行排序

我的脚本如下所示:

<? $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>';
}?>


<>有人知道该怎么做吗?

< P>你应该考虑在<代码> MySQL < /C>中对数据进行排序。如果确实需要在PHP中执行此操作,请使用
usort
函数(用户排序):

usort
函数必须采用两个参数(比较项),如果
item1
item2
小、相等或大,则返回
-1
0
1

例如:

$mydata = ... // some data

usort( $mydata, function($item1,$item2){
    // your sort logic
    return $item1['column1'] > $item2['columns1']; //simple numeric sort
}); 
usort( $mydata, function($item1,$item2){
    // your sort logic
    return str_cmp($item1['folder'], $item2['folder']); //string sort
}); 
考虑到您的示例,您可能希望按字符串值对项进行排序。在这种情况下,排序逻辑使用
str\u cmp
查看哪个项目比另一个数据数组中的项目大:

例如:

$mydata = ... // some data

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

希望这有帮助……

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

<?
$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()
,但在我看来,这有点过头了。

我想排序的总数是从数据库中得不到的结果……在这种情况下,应该这样做:)我编辑了我的答案,以包括另一个例子……我看不出这个答案是如何解决问题的?排序依据的值是系统上属于某个公司的文件数。仅从数据库中检索公司信息。随后将检索文件计数。我在这里看不到任何与排序相关的字符串。@TillHelgeHelwig我的假设是错误的,但我不想编辑答案,因为它无论如何都可能有用。。。重点是解释usort的功能…我可以看出这通常是多么有用,但在这种情况下,明显的问题是OP尚未得出结论,即使用数组缓存所有值可能是解决方案。因此,虽然一般来说很有帮助,但他基本上可以通过阅读PHP文档得到相同的答案。警告:
mysql.*
扩展从PHP5.5.0开始就被弃用,从PHP7.0.0开始被删除。相反,应该使用或扩展名。在选择MySQL API时,请参阅以获取更多帮助。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。