| 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: 14 let
|
|||
0