A 72x72 méretű tömböt, ahol a cellákban az if( SQαβ = SQγδ ) összehasonlítás eredménye áll. Egy táblázatban tároljuk el. Ahol a cellákban logikai értékek állnak. Ha a két érték egyenlő igaz ha különböző akkor hamis. Két plusz oszloppal kibővítjük a táblázatot. Az id az egyedi azonosításhoz kell. A name pedig a sorhoz tartozó SQαβ szöveget tartalmazza.

CREATE TABLE `sq` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(5) NOT NULL,  `SQab` tinyint(1) NOT NULL,
  `SQac` tinyint(1) NOT NULL,  `SQak` tinyint(1) NOT NULL,
  `SQau` tinyint(1) NOT NULL,  `SQat` tinyint(1) NOT NULL,
  `SQaq` tinyint(1) NOT NULL,  `SQas` tinyint(1) NOT NULL,
  `SQaw` tinyint(1) NOT NULL,  `SQba` tinyint(1) NOT NULL,
  `SQbc` tinyint(1) NOT NULL,  `SQbk` tinyint(1) NOT NULL,
  `SQbu` tinyint(1) NOT NULL,  `SQbt` tinyint(1) NOT NULL,
  `SQbq` tinyint(1) NOT NULL,  `SQbs` tinyint(1) NOT NULL,
  `SQbw` tinyint(1) NOT NULL,  `SQca` tinyint(1) NOT NULL,
  `SQcb` tinyint(1) NOT NULL,  `SQck` tinyint(1) NOT NULL,
  `SQcu` tinyint(1) NOT NULL,  `SQct` tinyint(1) NOT NULL,
  `SQcq` tinyint(1) NOT NULL,  `SQcs` tinyint(1) NOT NULL,
  `SQcw` tinyint(1) NOT NULL,  `SQka` tinyint(1) NOT NULL,
  `SQkb` tinyint(1) NOT NULL,  `SQkc` tinyint(1) NOT NULL,
  `SQku` tinyint(1) NOT NULL,  `SQkt` tinyint(1) NOT NULL,
  `SQkq` tinyint(1) NOT NULL,  `SQks` tinyint(1) NOT NULL,
  `SQkw` tinyint(1) NOT NULL,  `SQua` tinyint(1) NOT NULL,
  `SQub` tinyint(1) NOT NULL,  `SQuc` tinyint(1) NOT NULL,
  `SQuk` tinyint(1) NOT NULL,  `SQut` tinyint(1) NOT NULL,
  `SQuq` tinyint(1) NOT NULL,  `SQus` tinyint(1) NOT NULL,
  `SQuw` tinyint(1) NOT NULL,  `SQta` tinyint(1) NOT NULL,
  `SQtb` tinyint(1) NOT NULL,  `SQtc` tinyint(1) NOT NULL,
  `SQtk` tinyint(1) NOT NULL,  `SQtu` tinyint(1) NOT NULL,
  `SQtq` tinyint(1) NOT NULL,  `SQts` tinyint(1) NOT NULL,
  `SQtw` tinyint(1) NOT NULL,  `SQqa` tinyint(1) NOT NULL,
  `SQqb` tinyint(1) NOT NULL,  `SQqc` tinyint(1) NOT NULL,
  `SQqk` tinyint(1) NOT NULL,  `SQqu` tinyint(1) NOT NULL,
  `SQqt` tinyint(1) NOT NULL,  `SQqs` tinyint(1) NOT NULL,
  `SQqw` tinyint(1) NOT NULL,  `SQsa` tinyint(1) NOT NULL,
  `SQsb` tinyint(1) NOT NULL,  `SQsc` tinyint(1) NOT NULL,
  `SQsk` tinyint(1) NOT NULL,  `SQsu` tinyint(1) NOT NULL,
  `SQst` tinyint(1) NOT NULL,  `SQsq` tinyint(1) NOT NULL,
  `SQsw` tinyint(1) NOT NULL,  `SQwa` tinyint(1) NOT NULL,
  `SQwb` tinyint(1) NOT NULL,  `SQwc` tinyint(1) NOT NULL,
  `SQwk` tinyint(1) NOT NULL,  `SQwu` tinyint(1) NOT NULL,
  `SQwt` tinyint(1) NOT NULL,  `SQwq` tinyint(1) NOT NULL,
  `SQws` tinyint(1) NOT NULL,
  PRIMARY KEY  (`id`)
)

A feltöltéséhez a következő php kódot használjuk:

 

$inserttorzs="insert into SQ (name,";
    foreach($oszlop as $item){ //az oszlop tömbben az SQαβ értékek szerepelnek
        $inserttorzs.=$item.",";
    }
    $inserttorzs=substr($inserttorzs,0, -1);
    $inserttorzs.=") values ( ";

  //megvizsgáljuk az összes lehetséges párosítást (72*72) 
   foreach($oszlop as $key=> $item1){
        $insert=$inserttorzs."'".$item1."',";
    //ez máshogy van meg a másik is
        $query="select id from math order by ".$order[$key];
        $result=mysql_query($query) or die('Query failed1:'.mysql_error());
        $kulso=array();
        while($proba=mysql_fetch_row($result)){
            $kulso[]=$proba[0];
        }
        foreach($oszlop as $key2 =>$item2){
            $query="select id from math order by ".$order[$key2];
            $result=mysql_query($query) or die('Query failed2:'.mysql_error());
            $belso=array();
            while($proba=mysql_fetch_row($result)){
                $belso[]=$proba[0];
            }
            //ha a két tömb egyenlő akkor 1et írunk a táblázatba, ha különböző akkor 0-t
            $ered=$belso==$kulso ? "1":"0";
            $insert.=$ered.",";
        }
        $insert=substr($insert,0,-1);
        $insert.=");";
        $result=mysql_query($insert) or die('Query failed3:'.mysql_error());
    }

 

Klánokat is eltároljuk egy táblázatban, hogyha kellenek ne kelljen minden alkalommal meghatározni őket.

Csak a klán vezért (ő az első elem a klánban, róla nevezzük el a klánt) és a klán egy tagját tároljuk el.


CREATE TABLE `klan` (
  `id` int(11) NOT NULL,
  `klan` varchar(4) NOT NULL,
  `tag` varchar(4) NOT NULL
)

Az előbb előállított sq táblából határozzuk meg a klánokat.

$query="select * from sq"; //lekérjük az sq tábla tartalmát
$result=mysql_query($query) or die('Query failed:'.mysql_error());

majd a $klan nevű mátixba eltároljuk a klánokat. Az egyes sorokat a klán vezér azonosítja.


while($row=mysql_fetch_assoc($result)){
    foreach($oszlop as $key=> $item){ //az oszlop tömb az SQαβ értékeket tartalmazza
        if($row[$item]==1 ){  //megnézzük, hogy az sq táblában lévő SQαβ helyen milyne érték szerpel. Ha 1es van ott akkor a két átrendezés egyforma, tehát egy klánba tartozik.
            if(!isin($item,$klan) ){ //segédfüggvényt vezetünk be, hogy ellenőrizzük szerepel-e a megtalált klán a mátrixban, vagy egy újat kell felvenni.
                    $klan[$row['name']][]=$item;
            }            
        }
    }
}

function isin($elem,$klan){ //paraméterben megadjuk az elemet és a klánokat tartalmazó mátrixot
//megnézem, hogy klán vezér-e a keresett elem
    foreach(array_keys($klan) as $item){
        if($elem==$item ){
            return true;
        }
    }

//Ha nem klán vezér akkor egyik klán tagjaként keresem
    foreach($klan as $item){
        foreach($item as $item1){
            if($item1==$elem ){
                return true;
            }
        }
    }

//Ha egyik keresés sem találta meg az elemet akkro még nem szerepel a mátrixban. Tehát fel kell venni klánvezérnek.
    return false;
}

 

powered by

powered by