0

我对编程相当陌生,并试图通过 mssql 查询中的用户名对这个数组进行排序。尝试使用其他人在网络上制作的几个排序功能,但没有运气任何帮助都会很棒!

function getSalesPersonTargetTracker()
{
$targetTracker = new StdClass();
$targetTracker->agents = array();

$server = 'blah';
$connectioninfo = array( 'database' => 'blah', 'uid' => 'blah', 'pwd' => 'blah' );

$connection = sqlsrv_connect($server, $connectioninfo);

$query = "{call salespersontargettracker (?)}";
$params = array(
                 date_format(new DateTime(), '01/M/Y')
            );

//Run the Query             
$statement = sqlsrv_query($connection, $query, $params);

if (sqlsrv_fetch($statement) === false)
     print_r( sqlsrv_errors(), true);

//Read in the overall numbers
$targetTracker->target = (float)sqlsrv_get_field($statement, 0);
$targetTracker->workingDays = (int)sqlsrv_get_field($statement, 1);
$targetTracker->currentDay = (int)sqlsrv_get_field($statement, 2);
$targetTracker->dailyTarget = (float)sqlsrv_get_field($statement, 3);
$targetTracker->pointsShouldBeOn = (float)sqlsrv_get_field($statement, 4);
$targetTracker->pointsOn = (float)sqlsrv_get_field($statement, 5);
$targetTracker->pointsDifference = (float)sqlsrv_get_field($statement, 6);
$targetTracker->moneyShouldBeOn = (float)sqlsrv_get_field($statement, 7);
$targetTracker->moneyOn = (float)sqlsrv_get_field($statement, 8);
$targetTracker->moneyDifference = (float)sqlsrv_get_field($statement, 9);

//Move to the next result
sqlsrv_next_result($statement);

//Run through all of the agents and show their details
while (sqlsrv_fetch($statement))
{
    $salesPerson = new StdClass();
    $salesPerson->team = sqlsrv_get_field($statement, 0);
    $salesPerson->username = sqlsrv_get_field($statement, 1);
    $salesPerson->target = (float)sqlsrv_get_field($statement, 2);
    $salesPerson->workingDays = (int)sqlsrv_get_field($statement, 3);
    $salesPerson->currentDay = (int)sqlsrv_get_field($statement, 4);
    $salesPerson->dailyTarget = (float)sqlsrv_get_field($statement, 5);
    $salesPerson->pointsShouldBeOn = (float)sqlsrv_get_field($statement, 6);
    $salesPerson->pointsOn = (float)sqlsrv_get_field($statement, 7);
    $salesPerson->pointsDifference = (float)sqlsrv_get_field($statement, 8);
    $salesPerson->moneyShouldBeOn = (float)sqlsrv_get_field($statement, 9);
    $salesPerson->moneyOn = (float)sqlsrv_get_field($statement, 10);
    $salesPerson->moneyDifference = (float)sqlsrv_get_field($statement, 11);

    //Add this person to the people list
    $targetTracker->agents[] = $salesPerson;
}

return $targetTracker;
}
$targetTrackerall = getSalesPersonTargetTracker();

?>
    <table width="100%">
        <thead>
            <tr>
                <th><center>Username</center></th>
                <th><center>Day</center></th>   
                <th><center>%</center></th>     
                <th><center>% +/-</center></th>                 
                <th><center>Actual Total</center></th>
                <th><center>+/- Total</center></th>
            </tr>
        </thead>

    <?php 
    //This loops through every single agent in our array
    foreach ($targetTrackerall->agents as $agent) {
        //If their points difference is a negative, then name & shame them
        if ($agent->pointsDifference < 0)
        {
            ?>
            <tr>
                <td><b><?php echo $agent->username ?></b></td>
                <td style="text-align: center;"><?php echo $agent->currentDay  ?> / <b><?php echo $agent->workingDays?></b></td>
                <td style="text-align: center;"><?php echo $agent->pointsOn ?>%</td>
                <td style="text-align: center;"><?php echo round($agent->pointsDifference) ?>%</td>
                <td style="text-align: center;">£<?php echo number_format($agent->moneyOn) ?></td>
                <td style="color: red; text-align: center;">-£<?php echo number_format(($agent->moneyDifference)*-1) ?></td>

    <?php

        }
    }
    ?>
    </tr>
    </table>
4

2 回答 2

1

您应该使用usort并编写一个回调函数,例如

    }
    function cmp($a, $b)
    {
        return strcmp($a->username, $b->username);
    }
    usort($targetTracker, 'cmp');

    return $targetTracker;
}
于 2012-09-19T16:25:42.670 回答
0

If the username field is unique then you can use it as the key for the agents array and use ksort on the array.

<?php
...

while (sqlsrv_fetch($statement))
{
  ...

  //Add this person to the people list
  $targetTracker->agents[$salesPerson->username] = $salesPerson;
  ksort($targetTracker->agents);
}
...

?>
于 2012-09-19T20:28:56.960 回答