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.
Ordonare descrescatoare punctaj salvat in fisier
-
- Mesaje:14
Ordonare descrescatoare punctaj salvat in fisier
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?
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:
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.
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>
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:
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:
Apoi, cu file_get_contents() se citeste fisierul, cu json_decode() se transforma in array, si se ordoneaza cu array_multisort().
Exemplu:
- Daca stii php si lucrul cu Array, te descurci; daca nu, poti invata din lectiile si tutorialele din Cursul PHP-MySQL de pe site.
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>
- 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}
}
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
?>
alexlemnean
Mesaje:14
Pana aici am mai inteles , 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 !
// 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 !
MULTUMESC !