Php 在mysql\u fetch\u数组内的数组上排序
我有一个小PHP脚本,可以从数据库中获取结果。在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
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时,请参阅以获取更多帮助。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。