php
  • mysql
  • arrays
  • 2012-02-27 112 views 1 likes 
    1

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

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

    那么,迄今为止这么好。但问题是我想对文件总数进行排序。

    我的剧本是这样的:

    <? $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

    嘛。 ..只需创建一个数组并在循环中填充它。然后对数组进行排序并重新循环。另外,你需要缓存的公司名称:

    <? 
    $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(),但在我opionion这有点矫枉过正。

    +0

    感谢这工作就像一个魅力。 – 2012-02-27 20:18:10

    0

    您应该考虑排序MySql内的数据。如果你真的需要做的是在PHP中使用usort功能(用户排序):

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

    usort functon必须采取两个参数(对比项),并返回-101如果item1是“少” ,分别比“item2”“等于”或“更大”。

    例子:

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

    考虑到你的榜样,你可能希望通过字符串值进行排序项。这这种情况下的那种逻辑使用str_cmp,看看哪些产品从另一个withing数据数组更大:

    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 
    }); 
    

    希望这有助于...

    +0

    我想排序的总数是从数据库中得不到的结果... – 2012-02-27 16:27:52

    +0

    那么在这种情况下,这应该做到这一点:)我编辑了我的答案,以包括另一个例子... – 2012-02-27 16:30:26

    +0

    我可以看看这个答案是如何解决问题的?排序的值是系统中属于某个公司的文件数。只有公司信息从数据库中检索。之后检索文件数量。我看不到任何字符串与这里的排序相关。 – 2012-02-27 16:34:36

    相关问题