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

분명히 당신은 또한 하나 개의 배열로 모든 정보를 넣어 usort()를 사용하지만, 내 opionion에 약간의 과잉이 있다고 할 수있다.

+0

감사합니다. 매력적이었습니다. –

0

MySql 내에서 데이터 정렬을 고려해야합니다. 당신이 정말로 PHP를 사용 usort 기능을 수행하는 (사용자 종류)해야하는 경우 : item1이 "덜"인 경우

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

usort functon는 두 개의 매개 변수 (비교 항목) 및 반환 -1, 0 또는 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

수 있습니다. 이 대답이 어떻게 문제를 해결하는지 보지 않겠습니까? by by value는 특정 회사에 속한 시스템의 파일 수입니다. 회사 정보 만 데이터베이스에서 검색됩니다. 나중에 파일 수를 검색합니다. 여기서 정렬 할 문자열이 보이지 않습니다. –

관련 문제