Reputation: 5
I am fairly new to programming and am trying to sort this array by username from a mssql query. have tried using a couple of sort functions that others have made on the web, but have had no luck Any help would be amazing!
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>
Upvotes: 0
Views: 188
Reputation: 5683
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);
}
...
?>
Upvotes: 0
Reputation: 854
You should use usort and write a callback function like
}
function cmp($a, $b)
{
return strcmp($a->username, $b->username);
}
usort($targetTracker, 'cmp');
return $targetTracker;
}
Upvotes: 1