PHP: usort

Programovacie jazyky, rady, poradňa...
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

PHP: usort

Príspevok od používateľa gwixt »

nuz takze mam taky mensi problemik .. ono to vlastne nie je problemik ale warning :)

kod:

Kód: Vybrať všetko

  function cmppts($a, $b)
  {
    if ($a["points"] == $b["points"])
    {
        return 0;
    }
    return (($a["points"] > $b["points"]) ? -1 : 1);
  }

// mam pole $results[$id]["daco"]   .... to daco je okrem ineho aj "points"

    usort($results, "cmppts");
// toto mi vyhodi Warning: usort() [function.usort]: Invalid comparison function.

tusi niekto preco mi to hadze ten warning??

btw ta funkcia funguje..

riesenie typu @ ma nezaujima :wink:

dopredu dik :)
IgiPoP
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 446
Registrovaný: 12 sep 2005, 8:17
Bydlisko: MT

Re: PHP: usort

Príspevok od používateľa IgiPoP »

mozno to bude tym, ze pouzivas pre tento pripad nespravnu fciu, pretoze usort ti nezachova asociaciu klucov, preto skus uasort();


// edit: testoval som to presne na tvojom pripade a fungovalo mi to (s pouzitim uasort()
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

pise mo to iste aj s uasort() :?
IgiPoP
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 446
Registrovaný: 12 sep 2005, 8:17
Bydlisko: MT

Príspevok od používateľa IgiPoP »

gwixt napísal:pise mo to iste aj s uasort() :?
tak jedine skus dat nahlad toho pola, lebo iny problem ma nenapada. mozno prave samotne pole je vinik.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

Kód: Vybrať všetko

  function cmppts($a, $b)
  {
    if ($a["points"] == $b["points"])
    {
        return 0;
    }
    return (($a["points"] > $b["points"]) ? -1 : 1);
  }

Kód: Vybrať všetko

   
 $results=array();

//nejaky select z DB
    while ($daco=$this->db->fetch_assoc($res))
    {
//dalsi select z DB
      while ($vysledok=$this->db->fetch_assoc($res2))
      {
        $uid=$vysledok["uid"];

        if(IsSet($results[$uid]))
        {
          $results[$uid]["result"] .= $vysledok["result"]; 
          $results[$uid]["points"] += $vysledok["points"];
        	 $results[$uid]["result_ids"] .= $vysledok["result_id"];

        }
        else
        {
          $results[$uid]["uid"]=$uid;

          $results[$uid]["result"] = $vysledok["result"]; 
          $results[$uid]["points"] = $vysledok["points"];
        	 $results[$uid]["result_ids"] = $vysledok["result_id"];

          $results[$uid]["username"]=$user["name"];
        }


      }
    }

    uasort($results, "cmppts");
a vyhadzuje to len v PHP5 sa mi zda
IgiPoP
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 446
Registrovaný: 12 sep 2005, 8:17
Bydlisko: MT

Príspevok od používateľa IgiPoP »

ja pouzivam iba php5.

naco je tam break;?
pretoze ako nahle sa ti vykona break, tak ciklus (while) konci a nenaplnia sa ti ostatne polozky pola, medzi ktore patri aj s klucom "points". cize ak mas zapnute v konfiguraku varovania na kazdu <>vinu, tak ta upozornuje pri porovnavacej fcii, ze v poli neexituje taky kluc.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

ten break je tam preto, ze som ho zabudol zmazat .. toto nie je cely povodny kod ... redukoval som ho a ten break bol vo switchi ... takze sry :D
opravil som to v prispevku :wink:

ono tie polia su vyplnene spravne aj mi ich usort dobre zoradi ... len proste tu hlasku vypluje (mam zapnute hlasenie vsetkych veci)

takze otazka zostava
IgiPoP
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 446
Registrovaný: 12 sep 2005, 8:17
Bydlisko: MT

Príspevok od používateľa IgiPoP »

skusal som rozne moznosti aby som docielil rovnake varovanie, a podarilo sa mi to v pripade ak porovnavacia fcia neexistuje (samozrejme) alebo ( a to moze byt tvoj pripad) sa nachadza v objekte.
podla zdrojaku je jasne, ze usort alebo uasort volas z objektu, ale aby to fungovalo, musis mat porovnavaciu funkciu mimo objektu.

ak uz ani toto nepomoze, skus mi poslat zpakovane zdrojaky, pozrel by som sa na to. mozno je podstata problemu niekde inde.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

IgiPoP napísal:skusal som rozne moznosti aby som docielil rovnake varovanie, a podarilo sa mi to v pripade ak porovnavacia fcia neexistuje (samozrejme) alebo ( a to moze byt tvoj pripad) sa nachadza v objekte.
podla zdrojaku je jasne, ze usort alebo uasort volas z objektu, ale aby to fungovalo, musis mat porovnavaciu funkciu mimo objektu.

ak uz ani toto nepomoze, skus mi poslat zpakovane zdrojaky, pozrel by som sa na to. mozno je podstata problemu niekde inde.
ty vole ... to preco musi mat tu fciu mimo objektu???

ja som to mal v tom objekte ... :roll:

na to si prisiel systemom pokus-omyl alebo si to niekde vycital??

dik
IgiPoP
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 446
Registrovaný: 12 sep 2005, 8:17
Bydlisko: MT

Príspevok od používateľa IgiPoP »

gwixt napísal:ty vole ... to preco musi mat tu fciu mimo objektu???

ja som to mal v tom objekte ... :roll:

na to si prisiel systemom pokus-omyl alebo si to niekde vycital??

dik
viedla ma dedukcia a tak som to vyskusal nasimulovat do tvojho pripadu.
funkcie v objekte volas cez $this->funkcia();, ale ako to zapises to usortu alebo do uasortu? tieto fcie dostavaju nazov porovnavacej funkcie ako string a skusal som to zadat aj v pripade objektu, ale "\$this->cmppts" nefunguje ani ine kombinacie.
takze bud existuje specialny zapis na volanie porovnavacej fcie z objektu alebo porovnavacia fcia musi byt mimo objektu.

uf, bola to haluska, ale som rad, ze uz ti to facha.

myslim, ze :lock:
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

volanie vlastnych metod/atributov objektu cez $this je v PHP povinne???

hmm asi sa budem musiet na ten objektovy model v PHP konecne poriadne pozriet :?
IgiPoP
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 446
Registrovaný: 12 sep 2005, 8:17
Bydlisko: MT

Príspevok od používateľa IgiPoP »

gwixt napísal:volanie vlastnych metod/atributov objektu cez $this je v PHP povinne???

hmm asi sa budem musiet na ten objektovy model v PHP konecne poriadne pozriet :?
samozrejme a ked uz budes pozerat, tak na PHP5, OOP ma na lepsej urovni ako 4ka
model:

Kód: Vybrať všetko

class trieda
{
  private $nieco;

  public function __construct($string)
  {
     $this->nieco = $string;
  }

  public function getNieco()
  {
     if( isSet( $this->nieco )
       return $this->nieco;
  }
}

$obj = new trieda("Ahoj gwixt!");
echo $obj->getNieco(); // vypise: Ahoj gwixt!
echo $obj->nieco; // vypise ti chybu

// to len tak na demostraciu kras OOP v PHP5
good luck.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

pozri ja viem ako funguje OOP (private, public, protected, dedicnost, polymorfizmus a co ja viem co este) :wink:

ja len ze nepoznam presne fungovanie v PHP ... vychadzal som z C++ kde this nemusis pouzit vo vnutri triedy na pristup k atributom triedy ... teda ak ma pamat neklame :)
Napísať odpoveď