Számok, és hozzájuk tartozó stringek sorbarendezése és kiírása
2022-01-25T19:32:24+01:00
2022-01-26T13:19:29+01:00
2022-08-12T06:55:32+02:00
Breaknet
Sziasztok!

Van egy kis JS kódom, amiben az alma, körte, banán értékét ily módon jelenítem meg:

new Chartist.Bar('.ct-chart', { labels: ['alma', 'körte', 'banán'], series: [ [25, 20, 18] ] }
Ez egy diagramon megmutatja nekem csökkenő sorrendben, hogy az alma értéke 25, a körtéé 20, a banáné 18.

Amit szeretnék megoldani, hogy az értékeket előzetesen kiszámított változókból kapja, ezekből:

$alma = $ertek + $masikertek; $korte = $ertek2 + $masikertek45; $banan = $ertek5 + $masikertek5;

A diagram miatt a "series: []" részbe csökkenő sorrendbe kell beírnom a számokat, hogy szép legyen a megjelenítés, és a hozzájuk tartozó "labels: []" részben lévő dolgok is abban a sorrendben kell szerepeljenek.

Nem tudom, hogy tudom ezt megcsinálni. Addig megvagyok, hogy a számokat sorrendbe rendezem, viszont a hozzájuk tartozó címkéket nem tudom, hogy tudnám.

$szamok = array($alma, $korte, $banan); sort($szamok); $arrlength = count($szamok); for($x = 0; $x < $arrlength; $x++) { $sorbarendezettszamok = $szamok[$x].","; }

És akkor ezt a $sorbarendezettszamok-at tenném be a seriesbe így:

series: [ [<?php echo $sorbarendezettszamok; ?>] ]
De a labelsbe hogy rakom ennek megfelelő sorba az értékekhez tartozó neveket? De már ez a $sorbarendezettszamok sem jó így, tudom...
Mutasd a teljes hozzászólást!
De azt már be tudod helyettesíteni az outputba:

... $labels = implode(", ", $keys); $series = implode(", ", $values); ?> //JS kód: labels: [<?php print $labels; ?>], series: [ [<?php print $series; ?>] ]
Mutasd a teljes hozzászólást!

  • Tedd el a számított értékeidet egy asszociatív tömbbe:

    $data = array( "Alma" => 15, "Körte" => 18, "Banán" => 13 );
    Ha ezt dinamikusan szeretnéd, mert mondjuk ciklusban dolgozod fel az adatokat, így is lehet:

    $data = array(); $data["Alma"] = 15; //így adsz hozzá új elemet

    Rendezd a tömböt érték szerint csökkenő sorrendbe:

    arsort($data);
    A kulcsokat az array_keys, az értékeket az array_values adja meg, megőrizvén a csökkenő sorrendet.
    Mutasd a teljes hozzászólást!
  • <? $array=Array( "labels"=>Array("alma","körte","banán"), "series"=>Array( Array(25,20,18), Array(1,1,1), Array(1,1,1) ) ); $chart=Array(); foreach($array["labels"] AS $a=>$b){ $chart[$b]=0; foreach($array["series"] AS $c=>$d){ $chart[$b]+=$d[$a]; } } ?> <pre> <? print_r($chart); ?> </pre>
    Mutasd a teljes hozzászólást!
  • <script> var array={ labels: ['alma', 'körte', 'banán'], series: [ [25, 20, 18], [1, 1, 1], [1, 1, 1] ] } var chart={}; array["labels"].forEach((b,a)=>{ chart[b]=0; array["series"].forEach((d,c)=>{ chart[b]+=d[a]; }) }) console.log(chart) </script>
    Mutasd a teljes hozzászólást!
  • Szia,

    Köszönöm, próbálkozom, de gondolom nem így kellene...

    <?php $data = array( "alma" => $ertek + $masikertek, "körte" => $ertek2 + $masikertek45, "banán" => $ertek5 + $masikertek5 ); arsort($data); echo array_keys($array); ?> new Chartist.Bar('.ct-chart', { labels: ['<?php echo array_keys[1];?>', '<?php echo array_keys[2];?>', '<?php echo array_keys[3];?>'], series: [ [<?php echo array_values[1];?>, <?php echo array_values[1];?>, <?php echo array_values[1];?>] ] }
    Mutasd a teljes hozzászólást!
  • Miért nem használod az array_map és implode függvényeket, hogy előállítsd a JavaScript kódot?

    <?php $keys = array("alma", "körte", "banán"); //az array_keys eredménye $keys = array_map(function($val) { return '"'.$val.'"'; }, $keys); echo implode(", ", $keys);
    Ennek ez lesz a kimenete:

    "alma", "körte", "banán"
    Amit már be tudsz tenni a JavaScript kódba. Hasonló módon össze tudod rakni az array_values eredményét is.
    Mutasd a teljes hozzászólást!
  • Köszi, de sajnos nem értem.

    Az lesz a kimenete, hogy alma, körte, banán, de hogy kapom meg azt a kimenetet, ami a hozzájuk tartozó értékeket takarja? Ráadásul csökkenő sorrendben...
     
    Egyébként nem tudok programozni, csak a netről vadászok össze kódokat, és megpróbálom kilogikázni.
    Mutasd a teljes hozzászólást!
  • De azt már be tudod helyettesíteni az outputba:

    ... $labels = implode(", ", $keys); $series = implode(", ", $values); ?> //JS kód: labels: [<?php print $labels; ?>], series: [ [<?php print $series; ?>] ]
    Mutasd a teljes hozzászólást!
  • <? $data = array( "alma" => $ertek + $masikertek, "körte" => $ertek2 + $masikertek45, "banán" => $ertek5 + $masikertek5 ); arsort($data); ?> new Chartist.Bar('.ct-chart', { labels: <?= json_encode(array_keys($data));?>, series: [ <?= json_encode(array_values($data));?> ] } <?
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen mindkettőtöknek, mindegyik jó és érthető megoldás, Lillának adtam a pontot, mert ő írta meg elsőként, amit használni tudtam.
    Mutasd a teljes hozzászólást!
abcd