php
  • mysql
  • arrays
  • 2012-02-27 115 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

    相關問題