Autor | Zpráva | ||
---|---|---|---|
Vojko Profil |
#1 · Zasláno: 2. 9. 2012, 11:47:26
Dobrý deň,
chcel by som sa spýtať. Mám script, ktorý číta údaje z XML. Potrebujem ale, aby nevypisoval údaje po jednom, ale potrebujem, aby sčítaval tie údaje. Takto to vypadá teraz: http://www.cg.vojko.eu/tabulka-hlas.php Potrebujem, aby to každé meno sčítalo a hodilo číslo, koľko krát hlasoval. Tu je kód: <?php // Extracts content from XML tag function GetElementByName ($xml, $start, $end) { global $pos; $startpos = strpos($xml, $start); if ($startpos === false) { return false; } $endpos = strpos($xml, $end); $endpos = $endpos+strlen($end); $pos = $endpos; $endpos = $endpos-$startpos; $endpos = $endpos - strlen($end); $tag = substr ($xml, $startpos, $endpos); $tag = substr ($tag, strlen($start)); return $tag; } // Open and read xml file. You can replace this with your xml data. $file = "http://www.czech-craft.eu/xml/230.xml"; $pos = 0; $Nodes = array(); if (!($fp = fopen($file, "r"))) { die("Nemohu nacist XML soubor (spatna cesta nebo opravneni?)"); } while ($getline = fread($fp, 4096)) { $data = $data . $getline; } $count = 0; $pos = 0; // Goes throw XML file and creates an array of all <XML_TAG> tags. while ($node = GetElementByName($data, "<hlas>", "</hlas>")) { $Nodes[$count] = $node; $count++; $data = substr($data, $pos); } //samotny vypis udaju do tabulky jako priklad echo "<html><head></head><body>"; echo "<table border=\"2\">"; // Gets infomation from tag siblings. for ($i=0; $i<$count; $i++) { echo "<tr>"; echo "<td>"; echo GetElementByName($Nodes[$i], "<id>", "</id>"); echo "</td>"; echo "<td>"; echo GetElementByName($Nodes[$i], "<nick>", "</nick>"); echo "</td>"; echo "<td>"; echo GetElementByName($Nodes[$i], "<cas>", "</cas>"); echo "</td>"; echo "<td>"; echo GetElementByName($Nodes[$i], "<ip>", "</ip>"); echo "</td>"; echo "</tr>"; } echo "</table></body></html>"; ?> Ďakujem za každú radu. |
||
Darker Profil |
Děláš to nějak složitě. PHP má integrované funkce na čtení XML souborů, které tyhle soubory převedou na objekt.
Tagy potom procházíš takhle: $xml->{"jmeno"}[$poradi]; /*nebo*/ $xml->jmeno[$poradi] for(/*...*/) { $xml->hlas[$i] } $hlasy = array(); for($i=0;$i<count($xml->hlas);$i++) $hlas = $xml->hlas[$i]; if(isset($hlasy[(string)$hlas->nick])) //Zjišťuje zda už v poli existuje položka se jménem uživatele (např.: $hlasy["pepa"]) $hlasy[(string)$hlas->nick]++; //Uživatel už má záznam - přičteme 1 else $hlasy[(string)$hlas->nick]=1; //Vytvoříme nový záznam o tomto uživateli - zatím má 1 hlas } |
||
Vojko Profil |
#3 · Zasláno: 2. 9. 2012, 12:52:57
Nó to hlasovanie cez Databázu nemám ako riešiť, keďže je to hlasovanie na inom webe, takže to ja moc neovplyvním :/
Chcel by som ťa poprosiť, či by si mi neposlal celý script ako má byť, pretože moc som tomu nepochopil, ako to mám pozliepať :D |
||
juriad Profil |
#4 · Zasláno: 2. 9. 2012, 13:50:49
základ by vypadal asi takto (otestované):
<?php $file = "http://www.czech-craft.eu/xml/230.xml"; if (!($fp = fopen($file, "r"))) { die("Nemohu nacist XML soubor (spatna cesta nebo opravneni?)"); } $data = ""; while ($getline = fread($fp, 4096)) { $data = $data . $getline; } $hlasy = array(); $xml = simplexml_load_string($data); foreach($xml->hlas as $hlas) { $nick = (string) $hlas->nick; if(array_key_exists($nick, $hlasy)) { $hlasy[$nick]++; } else { $hlasy[$nick] = 1; } } echo "<html><head></head><body>"; echo "<table border=\"2\">"; echo "<tr><th>Nick</th><th>Pocet</th></tr>"; foreach($hlasy as $nick => $pocet) { echo "<tr>"; echo "<td>$nick</td><td>$pocet</td>"; echo "</tr>"; } echo "</table>"; echo "</body></html>"; |
||
Darker Profil |
#5 · Zasláno: 2. 9. 2012, 13:51:36
Vojko:
Vzhledem k tomu, že jsem netušil, že panther nerozumí ironii a můj předchozí příspěvek bude přesunut (U ledu>Kontejner), řeknu to takhle: To co jsem napsal výše k sestavení skriptu co potřebuješ stačí. Pokud chceš aby za tebe někdo udělal tvojí práci popros kamaráda (třeba toho co za tebe udělal původní skript) nebo zaplať. |
||
Časová prodleva: 3 dny
|
|||
Vojko Profil |
#6 · Zasláno: 5. 9. 2012, 13:23:55
Ďakujem veľmi pekne juriad, a nevedel by si mi nejako poradiť, ako to spravím aby to išlo od najväčšieho počtu hlasov po najmenší ?
Darker prepáč, ale tomu som nerozumel čo si mi napísal ako odpoveď. Slušne som požiadal o radu, nikoho som nenútil aby mi tu niekto niečo spravil. Som rád, že juriad mi odpísal a aj ty. Ako hovorím, keby niekto neodpisoval, určite nebudem zakladať ďalšie témy s tým istým problémom. Ďakujem za pochopenie a Vašu pomoc. |
||
juriad Profil |
na řádek 24 přidej:
arsort($hlasy); |
||
Vojko Profil |
#8 · Zasláno: 5. 9. 2012, 14:48:33
Ďakujem veľmi pekne :)
Prajem príjemný zvyšok dňa. |
||
Časová prodleva: 12 let
|
0