Ordonare descrescatoare punctaj salvat in fisier

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
alexlemnean
Mesaje:14

Ordonare descrescatoare punctaj salvat in fisier

Salut,
As dori sa fac un clasament cu punctaj iar clasamentul sa se actualizeze automat, adica sa se pune in ordine descrescatoare dupa un punctaj pe care eu il actualizez intr`un fisier de exemplu. Mai pe "babeste", am intr`un fisier punctajul iar cand modific punctajul si dau save la fisier, clasamentul sa se actualizeze automat in ordine descrescatoare pe site.
Daca mi`ai putea sugera cu ce ar trebui sa incep sau de unde.

Multumesc anticipat.

MarPlo Mesaje:4343
Salut
Depinde cum ai datele /punctajele salvate (structurate) in fisier. Cate un numar pe fiecare linie sau separate printr-un anumit caracter, ori altfel mai complex?

alexlemnean Mesaje:14
Poi ma gandeam ca, clasamentul sa il fac cu <table>. De exemplu:

Cod: Selectaţi tot

<table border="1">
  <tr>
    <th>Echipa</th>
    <th>Meciuri Jucate</th>
    <th>Puncte</th>
  </tr>
  <tr>
    <td>Real Madrid</td>
    <td>3</td>
    <td>24</td>
  </tr>
  <tr>
      <td>Barcelona</td>
    <td>3</td>
    <td>23</td>
</table>
Acuma cand eu modific la Barcelona <td>23</td> cu <td>26</td> si dau save pe site sa apara Barcelona prima in tabel si Real Madrid a doua.

MarPlo Mesaje:4343
Tabelele HTML nu sunt pentru stocarea datelor, pentru a fi preluate si aranjate. Tabelele HTML sunt pt afisare.
Pentru stocarea datelor poti folosi un tabel intr-o baza de date MySQL, de exemplu, pt. acel clasament, un tabel cu aceste coloane:
id - echipa - meciuri - puncte

Daca stii php si mysql, stocarea datelor in mysql ofera avantaj de a le prelua (selecta) usor in multe moduri.

Daca vrei sa tii datele in fisier pe server, poti folosi un format XML intr-un fisier ".xml".
Pt ce ai tu, fisierul .xml ar putea fi asa:

Cod: Selectaţi tot

<?xml version="1.0" encoding="utf-8"?>
<fotbal>
  <echipa name="Real Madrid">
    <meciuri>3</meciuri>
    <puncte>24</puncte>
  </echipa>
  <echipa name="Barcelona">
    <meciuri>3</meciuri>
    <puncte>23</puncte>
  </echipa>
</fotbal>
Apoi, cu SimpleXML preiei datele din fisierul .xml, le poti adauga intr-un array multi-dimensional, iar cu array_multisort() poti ordona elementele din array (ca in exemplu de mai jos).

- O alta varianta, mai usoara de a stoca datele in fisier text pe server, este in format JSON.
Exemplu fisier.txt cu datele in format JSON:

Cod: Selectaţi tot

{
"Real Madrid": {"meciuri": 3, "puncte": 24},
"Barcelona": {"meciuri": 3, "puncte": 26},
"Alta_Echip": {"meciuri": 2, "puncte": 21}
}
Apoi, cu file_get_contents() se citeste fisierul, cu json_decode() se transforma in array, si se ordoneaza cu array_multisort().
Exemplu:

Cod: Selectaţi tot

<?php
// preia sirul JSON din 'fisier.txt' si-l transforma in array
$fotbal = json_decode(file_get_contents('fisier.txt'), true);
$tmp = Array();       // folosit pt ordonare

// adauga in $tmp valorile de la 'puncte'
foreach($fotbal as &$ma)  $tmp[] = &$ma["puncte"];

// ordoneaza array-ul principal ($fotbal) folosind valorile din $tmp ordonate descrescator
array_multisort($tmp, SORT_DESC, $fotbal);

// Test
var_export($fotbal);

// Aici se pot afisa datele/ adauga in cod /tabel html
?>
- Daca stii php si lucrul cu Array, te descurci; daca nu, poti invata din lectiile si tutorialele din Cursul PHP-MySQL de pe site.

alexlemnean Mesaje:14
Pana aici am mai inteles :D, dar nu ma descurc la ultima parte
// Aici se pot afisa datele/ adauga in cod /tabel html.

Am incercat cu https://marplo.net/php-mysql/creare_tabel_array.html dar nu am reusit . Daca imi mai poti sugera cu ce sa incep, iti sunt recunoscator !

Multumesc mult !

MarPlo Mesaje:4343
Poti incerca cu acest exemplu:

Cod: Selectaţi tot

<?php
// functie pt. ordonare array multi-dimensional
function sortMultiArray($arr, $k, $sort) {
  $tmp = Array();
  foreach($arr as &$ma)  $tmp[] = &$ma[$k];
  array_multisort($tmp, $sort, $arr);
  return $arr;
}

// Array cu datele ce vor fi afisate in tabel
$fotbal = array(
  'Real Madrid'=>array('meciuri'=>3, 'puncte'=>24),
  'Barcelona'=>array('meciuri'=>3, 'puncte'=>26),
  'Alta_echipa'=>array('meciuri'=>2, 'puncte'=>21)
);

/* Sau
// preia datele din fisierul cu sirul JSON si-l transforma in array
$fotbal = json_decode(file_get_contents('fisier.txt'), true);
*/

// Se creaza inceputul tabelului HTML
$tabel_html = '<table border="1"><tr><th>Echipa</th><th>Meciuri Jucate</th><th>Puncte</th></tr>';

// Daca array-ul are cel putin un element
if (count($fotbal) > 0) {
  // ordoneaza datele dupa 'puncte', descrescator
  $fotbal = sortMultiArray($fotbal, 'puncte', SORT_DESC);

  foreach($fotbal as $k => $v) {
    // Se adauga in tabel coloanele
    $tabel_html .= '<tr><td>' .$k. '</td><td>' .$fotbal[$k]['meciuri']. '</td><td>' .$fotbal[$k]['puncte']. '</td></tr>';
  }
}

// inchiderea tabelului HTML
$tabel_html .= '</table>';

// Se afiseaza tabelul obtinut
echo $tabel_html;
?>

alexlemnean Mesaje:14
Am reusit. Iti multumesc foarte mult si raman dator :) .

MULTUMESC !