5 berichten aan het bekijken - 1 tot 5 (van in totaal 5)
  • Q:

    Bijdrager
    computer space

    PHP elementen aan array toevoegen en dan sorteren?

    Ik haal uit een database informatie op en maakt daarmee een SPAN met een item uit een webshop.
    Deze HTML stop ik in $span
    Nu bereken ik een waarde die bepaalt hoe relevant het item is, $value

    Wat ik nu wil deze 2 waarden aan een rechthoekige array toevoegen, en vervolgens de array sorteren op $value, en dan de HTML brokken achter elkaar zetten. Hoe doe ik dit?

    Dus ik wil een array maken als
    [[$html1],[80]],
    [[$html2],[70]],
    [[$html3],[100]]

    En na sorteren moet dat dit worden:
    [[$html3],[100]],
    [[$html1],[80]],
    [[$html2],[70]]

    En dan dus als eindresultaat $html3.$html1.$html2

    Bovendien wil ik nog de mogelijkheid hebben om het aantal items te beperken. Stel er voldoen 50 items uit de database, dan wil ik bijvoorbeeld de selectie beperken tot de 20 met de hoogste waarde.

    De berekening is te complex om al bij het uitlezen van de database te doen, anders is dat de makkelijkere weg.


    Bijdrager
    The JM

    Als je de variabelen $html1, $html2 en $html3 als keys gebruikt in de array, kun je er makkelijk op sorteren met ksort.


    Bijdrager
    computer space

    Mogen er dan dezelfde keys zijn?

    Ik heb nu dit
    In de ophaalroutine

     
    $element=array($span,$value);
    $results[]=$element;
     

    en daarna dit

     
    $results=transpose($results);
    array_multisort($results[1],SORT_DESC,$results[0]);
    $results=transpose($results);
    for ($n=0;$n<count($results);$n++)
    {
    	$line=$results[$n];
    	echo ($line[0]);
    }
     

    Bijdrager
    Jakko Westerbeke
    computer op 19 februari 2014

    Mogen er dan dezelfde keys zijn?

    Nee — keys zijn altijd uniek, anders zouden ze niet kunnen werken. (Hoewel … we hebben het hier wel over PHP, dus ik houd alles voor mogelijk;) ) Probeer je twee keer dezelfde key te gebruiken, dan wordt de bestaande waarde voor die key vervangen door de nieuwe die je in de array probeert te stoppen.

    In jouw geval neem ik aan dat de getallen, zoals je die in je voorbeeld gebruikt, niet persé uniek zijn? Want als ze dat wel zijn is het eenvoudig genoeg: gebruik die als key en sorteer dan daarop. Anders denk ik dat een manier om dit te bereiken is om al die waarden apart in een array te zetten en dan door je array met SPANs en waarden te lopen, om dan bij elke waarde in de eerste array weer de bijbehorende SPANs te zetten.

    Afgezien daarvan:

     
    $results=transpose($results);

    Wat doet dit? Volgens de PHP-documentatie bestaat er geen functie transpose().


    Bijdrager
    computer space

    Die draait de array een kwart slag. Je kunt met sort namelijk alleen rijen sorteren, niet kolommen.

    Edit, klopt, bestaat niet, ik had deze functie gebruikt:

     
    function transpose($array) {
        array_unshift($array, null);
        return call_user_func_array('array_map', $array);
    }
     
5 berichten aan het bekijken - 1 tot 5 (van in totaal 5)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.