2012-02-27 18 views
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 />'; 
} 
?> 

もちろん、あなたはまた、1つの配列にすべての情報を入れてusort()を使用していますが、少しやり過ぎだ、私のopionionで可能性があります。

+0

これは魅力的なように働いてくれてありがとう。 –

0

データの並べ替えはMySql以内に行ってください。あなたは本当にPHPでそれを行う必要がある場合usort機能(ユーザーソート)を使用します。

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

usortをfunctonは、2つのパラメータ(比較項目)を取る必要があり、item1は「少ない」であれば-10または1を返します。 、 "equal"、または "greater"に設定します。

例:アカウントに例を取る

$mydata = ... // some data 

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

は、おそらく文字列値でアイテムをソートしたいです。これは、ソートロジックのため、その場合、別のwithingデータ配列から大きいどの項目を参照して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 
}); 

希望...まあ

+0

ソートしたい合計は、データベースから取得しない結果です... –

+0

この場合はこれが必要です:)私は別の例を含めるように私の答えを編集しました... –

+0

私はできますこの答えがどのように問題を解決するのか見ていないのですか?並べ替える値は、特定の会社に所属するシステム上のファイルの数です。企業情報のみがデータベースから取得されます。その後、ファイル数が取得されます。ここでソートするのに関連する文字列はありません。 –