Skip to content
Advertisement

Automatically Sort Table By Ascending Quantity in Php/html, not sql

I have data, from HTTP requests, that I am rendering in the form of a table. Right now, I just have it so that the listings are ordered as the for loop processes them, but I want it so that the for loop processes them and then sorts the data according to highest % of weight. Weight is a column header in a table wit h7 other column headers.

Now, this project is in php + html. I have never used php before, so am rather confused with syntax and where to put logic.

I have tried using the sort() and asort() functions in php, but I am clearly putting these things in the wrong order. I feel like what I want to do is: 1) save the output of the for_loop that renders the table in a table format as some data type 2) then sort that data type according to the column of weight in ascending order. 3) display this in a table

Here is some code!

                    "<div class='last-updated text-left'>" .
                        "<small>As of <span>$update_date</span></small>" . 
                    "</div>" .
                    "<table class='ershares-table with-thead'>" .
                    "<thead><tr>" . 
                        "<th>Company</th>" . 
                        "<th>Weight</th>" . 
                        "<th>Ticker</th>" . 
                        "<th>Market Price</th>" . 
                        "<th>Shares Held</th>" . 
                        "<th>Market Value</th>" . 
                        "<th>CUSIP</th>" . 
                    "</tr></thead> " . 
                    "<tbody>";
                        for ($i = 0; $i < $for_loop_limit; $i++) : 
                            echo 
                                "<tr>" . 
                                    "<td><strong>" . $ers_holdings[$i]["securityDescription"] . "</strong></td>" .
                                    "<td>" . getMarketValuePercentage($ers_holdings[$i]["securityIdentifier"], $ers_holdings[$i]["marketValuePercentage"]) . "%</td>" . 
                                    "<td>" . $ers_holdings[$i]["ticker"] . "</td>" . 
                                    "<td>" . $ers_holdings[$i]["marketPriceOfSecurity"] . "</td>" . 
                                    "<td>" . $ers_holdings[$i]["sharesHeldOfSecurity"] . "</td>" . 
                                    "<td>" . $ers_holdings[$i]["marketValueOfHolding"] . "</td>" . 
                                    "<td>" . $ers_holdings[$i]["securityIdentifier"] . "</td>" . 
                                "</tr>";
                        endfor;
                    echo "</tbody>" . 
                '</table>' . 

I want to sort the table by having the highest value for getMarketValuePercentage... at the top. Thank you in advance.

Advertisement

Answer

You’re looking for usort().

Before doing your foreach loop, you’ll call something along the lines of:

usort($ers_holdings, function ($a, $b) {
    return ($a['securityIdentifier'] <=> $b['securityIdentifier']);
});

which would sort the data in $ers_holdings based on the ['securityIdentifier'] value.

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement