Autor Zpráva
GamerX
Profil
Dobrý den měl bych na vás dvě prozbičky, tou první je jestli by jste mi nemohli zkontrolovat tento kod co jsem napsal, hlavně jestli jsem zprávně definoval ty proměnné $nick, $level atd, a jak ty řetezce potom srovnat od největsiho po nejmenši i když se tam budou třeba nějaka čísla rovnat. Budu moc vděčný za vaši pomoc.

<?php
    $spojeni = ftp_connect("***");
    ftp_login($spojeni, "***", "***"); //pripoji se k serveru
    $uctu = count(ftp_nlist($spojeni,  $cesta));
    $contents = ftp_nlist($spojeni, $cesta);
    $nick[$uctu];
    $level[$uctu];
    $XP[$uctu];
    $bank[$uctu];
    $kills[$uctu];
    $deaths[$uctu];
    $hss[$uctu];
    $hod[$uctu];
    $min[$uctu];

    for($i = 0; $i < $uctu; $i++) {
        if(!ftp_get($spojeni, "hrac.ini", $contents[$i], FTP_ASCII)) { 
            ftp_close($spojeni);
        } else {
            $soubor = fopen("hrac.ini", "r"); 
            $jmeno = str_replace($cesta," ",$contents[$i]);
            $nick[$i] = str_replace('.ini'," ",$jmeno);
            $heslo=fgets($soubor);
            $level[$i]=fgets($soubor);
            $XP[$i]=fgets($soubor);
            $bank[$i]=fgets($soubor
            $kills[$i]=fgets($soubor);
            $deaths[$i]=fgets($soubor);
            $hss[$i]=fgets($soubor);
            $mute=fgets($soubor);
            $hitman=fgets($soubor);
            $hod[$i]=fgets($soubor);
            $min[$i]=fgets($soubor);
            fclose($soubor);
            unlink("hrac.ini");
        }
        ftp_close($spojeni);
    }
?>
Joker
Profil
GamerX:
hlavně jestli jsem zprávně definoval ty proměnné $nick, $level atd
Asi ne. Co by to mělo dělat?
GamerX
Profil
Joker:

No jestli jsou ty proměneé dobře vypsané ja myslím že ne protože ja jsem zvykli to psat tako z jiného jazyka takže tu nevím jak to napsat.
Joker
Profil
GamerX:
Tak v PHP to je nesmysl, maximálně to bude generovat chybovou hlášku o neexistujících indexech v poli.
juriad
Profil
GamerX:
Jsi zvyklý deklarovat proměnné. V PHP to není třeba. Je však velice vhodné jim nastavit výchozí hodnoty.
U polí se neuvádí velikost, v PHP se pole prostě natáhne. Tedy řádky 6 - 14 by měly být:
$nick = array();
...
GamerX
Profil
juriad:
Moc díky.

A ještě k tomu jak chci seřadit ty řetězce od největšího po nejmenší tak abych potom z te funkce co mi to seřadí dostal pozici v řetězci abych k tomu mohli přiřadit i ostatní údaje a vypsat do tabulky jestli to je možné teda.
GamerX
Profil
Tak skusil jsem si něco udělat sám ale nejde to chci získat prvních 15 největších čísel řetežce, takže každý pořadí udělam preš jeden cyklus takže bude 15 cyklu ale nijak se mi ty cykli nechtěj spustit a nevím proč
<?php
    $spojeni = ftp_connect("****");
    ftp_login($spojeni, "****", "****"); //pripoji se k serveru
    $uctu = count(ftp_nlist($spojeni,  $cesta));
    $contents = ftp_nlist($spojeni,  $cesta);
    $nick = array();
    $level = array();
    $XP = array();
    $bank = array();
    $kills = array();
    $deaths = array();
    $hss = array();
    $hod = array();
    $min = array();

    for($i = 0; $i < $uctu; $i++) {
        if(!ftp_get($spojeni, "hrac.ini", $contents[$i], FTP_ASCII)) { 
            ftp_close($spojeni);
        } else {
            $soubor = fopen("hrac.ini", "r");
            $jmeno = str_replace($cesta," ",$contents[$i]);
            $nick[$i] = str_replace('.ini'," ",$jmeno);
            $heslo=fgets($soubor);
            $level[$i]=fgets($soubor);
            $XP[$i]=fgets($soubor);
            $bank[$i]=fgets($soubor);
            $kills[$i]=fgets($soubor);
            $deaths[$i]=fgets($soubor);
            $hss[$i]=fgets($soubor);
            $mute=fgets($soubor);
            $hitman=fgets($soubor);
            $hod[$i]=fgets($soubor);
            $min[$i]=fgets($soubor);
            fclose($soubor);
            unlink("hrac.ini");
        }
    }
    ftp_close($spojeni);
    $hodnota = 0;
    $poradi = array();
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i]) {
            $hodnota = $level[$i];
            $poradi[14] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[13] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[12] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[11] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[10] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[9] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[8] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[8] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[7] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[7] && $i != $poradi[8] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[6] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[6] && $i != $poradi[7] && $i != $poradi[8] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[5] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[5] && $i != $poradi[6] && $i != $poradi[7] && $i != $poradi[8] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[4] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[4] && $i != $poradi[5] && $i != $poradi[6] && $i != $poradi[7] && $i != $poradi[8] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[3] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[3] && $i != $poradi[4] && $i != $poradi[5] && $i != $poradi[6] && $i != $poradi[7] && $i != $poradi[8] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[2] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[2] && $i != $poradi[3] && $i != $poradi[4] && $i != $poradi[5] && $i != $poradi[6] && $i != $poradi[7] && $i != $poradi[8] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[1] = $i;
        }
    }
    $hodnota = 0;
    for($i = 0; $i < $uctu; $i++) {
        if($hodnota >= $level[$i] && $i != $poradi[1] && $i != $poradi[2] && $i != $poradi[3] && $i != $poradi[4] && $i != $poradi[5] && $i != $poradi[6] && $i != $poradi[7] && $i != $poradi[8] && $i != $poradi[9] && $i != $poradi[10] && $i != $poradi[11] && $i != $poradi[12] && $i != $poradi[13] && $i != $poradi[14]) {
            $hodnota = $level[$i];
            $poradi[0] = $i;
        }
    }
?>

Už jsem na to přišel čím to bylo funguje to ale je to strašně pomalý není nějaký rychlejší způsob?
Taps
Profil
GamerX:
Celý skript, by bylo vhodné zoptimalizovat.
Virtus
Profil
Zdravím, tady trochu tý optimalizace:
1)
$uctu = count(ftp_nlist($spojeni,  $cesta));
    $contents = ftp_nlist($spojeni,  $cesta);
není potřeba se dvakrát ptát ftp na soubory ve složce, lépe:
$contents = ftp_nlist($spojeni,  $cesta);
$uctu = count($contents);
    
a když už jsme u toho tak ani proměnnou $uctu nepotřebujem, v PHP lze použít tohle:
foreach($contents as $key => $fileName){
  if(!ftp_get($spojeni, "hrac.ini", $fileName, FTP_ASCII)) { 
      break;
  } else {
      $heslo=fgets($soubor); //nemělo by zde být $heslo[$key] = fgets($soubor); ?
      $level[$key]=fgets($soubor);
      $XP[$key]=fgets($soubor)
      //...atd.
  }
}
2) Je dobrý pokud se používá nějaká konstantní hodnota, ji předávat pomocí konstanty/proměnné napříč celým script, v případě změny, to pak člověk nemusí přepisovat všude ale stačí na jednom místě:
$hracIniPath= 'hrac.ini'; nebo define('HRAC_INI_PATH','hrac.ini');

3) Místo řádku 18 v [#7] stačí použít break;, jinak se zbytečně dvakrát ukončuje spojení na ftp (řádek 38)

4) unlink("hrac.ini"); vyndat z cyklu, neni potřeba vždy soubor smazat, funkce ftp_get() soubor přepíše, poku již existuje, takže unklik dát až za cyklus

5) a teď k tomu řazení :D, myslím že zde by stačilo použít něco takového: asort($level);, případně arsort($level); - v proměnné $level, budou levely seřazeny automaticky, Př.:
$x = array(1=>4,2=>3,3=>15,4=>1);
asort($x);
var_dump($x);
//vypíše: array(4) {
  [4] =>
  int(1)
  [2] =>
  int(3)
  [1] =>
  int(4)
  [3] =>
  int(15)
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: