Autor | Zpráva | ||
---|---|---|---|
BedyR Profil |
#1 · Zasláno: 25. 5. 2012, 09:23:26
Ahoj,
skript je funkční ale zdá se mi že je zbytečně dlouhý. Nejsem tak úplně v PHP zběhlí takže budu rád za každou radu. cíl skriptu je : - načíst data, - převést řetězec do pole víceúrovňového ( jednou jsem na internetu vyděl příklad, když jsem hledal něco jiného a teď to nemohu najít, bylo to zpracované jedním příkazem, já to řeším cyklem ) - porovnat s dalším polem a vytvořit výsledné pole( tak aby obsahovalo klíče vyskytující se v obou polích a přebralo hodnotu 'typ_role' z pole generovaného z řetězce (hodnoty přiděleny uživateli) i v druhém poli je hodnota 'typ_role' (ale implicitní) výsledek bude sloužit pro generování menu tady je kód: <?php /* verze s MySQL *//* $sql = "select sez_prav from . . . ." ; $res = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($res)==1) { mysql_data_seek($res,0); $str = mysql_fetch_assoc($res); $pom = explode('#', $str['sez_prav'], -1); $a = count($pom); for ($x=0;$x<$a;$x++){ list($klic,$hodn) = explode("/", $pom[$x]); $prava[$klic] = $hodn; } $sql = "select menu . . . from . . . . . " ; $res = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($res)>0) { mysql_data_seek($res,0); $menu = array(); while ($rows = mysql_fetch_assoc($res)) { $kod = $rows['kod']; $menu[$kod]['typ_role'] = $rows['typ_role']; $menu[$kod]['nazev'] = $rows['nazev']; } $result = array_intersect_key($menu, $prava ); while (list($klic, $prac) = each($result)) { $result[$klic]['typ_role'] = $prava[$klic]; } } } */ /* verze s array */ $str = Array( "sez_prav" => "11/3#32/2#41/1#"); $pom = explode('#', $str['sez_prav'], -1); $a = count($pom); $poc = 6; $arr1 = array("kod" => "11","typ_role" => "2","nazev" =>"menu1"); $arr2 = array("kod" => "21","typ_role" => "2","nazev" =>"menu2"); $arr3 = array("kod" => "31","typ_role" => "2","nazev" =>"menu31"); $arr4 = array("kod" => "32","typ_role" => "2","nazev" =>"menu32"); $arr5 = array("kod" => "41","typ_role" => "2","nazev" =>"menu4"); $arr6 = array("kod" => "51","typ_role" => "2","nazev" =>"menu5"); for ($x=0;$x<$a;$x++){ list($klic,$hodn) = explode("/", $pom[$x]); $prava[$klic] = $hodn; } echo 'práva : <pre style="color:blue; font-size:10px; font-family:arial;">' ; print_r($prava); echo '</pre>'; for ($x=0;$x<$poc;$x++){ $arr = ${"arr".($x+1)}; $kod = $arr['kod']; $menu[$kod]['typ_role'] = $arr['typ_role']; $menu[$kod]['nazev'] = $arr['nazev']; } echo 'menu : <pre style="color:green; font-size:10px; font-family:arial;">' ; print_r($menu); echo '</pre>'; $result = array_intersect_key($menu, $prava ); while (list($klic, $prac) = each($result)) { $result[$klic]['typ_role'] = $prava[$klic]; } echo 'výsledek : <pre style="color:red; font-size:10px; font-family:arial;">' ; print_r($result); echo '</pre>'; ?> |
||
1Pupik1989 Profil |
#2 · Zasláno: 25. 5. 2012, 11:23:43
Pokud to chápu, tak nastuduj LEFT JOIN.
|
||
BedyR Profil |
#3 · Zasláno: 25. 5. 2012, 12:38:04
1Pupik1989:
Díky za námět, ale formát dat v tabulce 1 je stejný jako je na řádku 27 a v tabulce 2 jako na řádku 31. Takže je pro porovnání data v první tabulce nejdříve pole 'sez_prav' = "11/3# ..." převést na stejný formát jako je v tabulce 2 'kod' = "11", 'typ_role'= "3" a to já viděl jako nejschůdnější přes pole. |
||
Časová prodleva: 13 let
|
0