Definire variable in functie de valori dinamice din array

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje: 430

Definire variable in functie de valori dinamice din array

Am un array de forma (din SELECT)

Cod: Selectaţi tot

array ( 0 => array ( 0 => array ( 'actor' => 'superuser', 'numetabela' => 'useri', 'act' => 'ADD', 'actiune' => 'adaugare', 'idusrtip' => 1, 'idactiune' => 1, 'idtabela' => 1, 'tipusr_id' => 1, 'actiune_id' => 1, 'tabel_id' => 1, 'princ' => 1, ), 1 => array ( 'actor' => 'superuser', 'numetabela' => 'echipe', 'act' => 'MOD', 'actiune' => 'modificare', 'idusrtip' => 1, 'idactiune' => 2, 'idtabela' => 7, 'tipusr_id' => 1, 'actiune_id' => 2, 'tabel_id' => 7, 'princ' => 1, ), ), )
Vreau sa setez niste variabile (initializate la valoarea 0) in functie de valorile din array.
Daca 'numetabela' => 'useri' si 'act' => 'ADD' sa-mi seteze o variabila, exemplu $existaadd=1;
Daca 'numetabela' => 'echipe' si 'act' => 'MOD' sa-mi seteze alta variabila, exemplu $existamod=1;
Aici am simplificat si am pus numai 2 cazuri, dar pot exista mai multe tabele cu act' => 'MOD' sau act' => 'ADD' sau ambele (fiecare pereche fiind o inregistrare separata, deci inregistrarile sint de fapt perechi numetabela- act) , pe mine ma intereseaza corespondenta numetabela => act.
Cum pot realiza asta? Am incercat cu mai multe variante de foreach dar n-am ajuns la rezultatul dorit.

La fiecare apel eu am o variabila cu numele tabelei $tabela, ex: $tabela='useri'. Am incercat:

Cod: Selectaţi tot

<?php
$tabela='useri';
$existatabela=0;
foreach ($_SESSION["accesuseri"] as $q){
foreach ($q as $k=>$v){
$existaadd=0;
$existamod=0;
$existadel=0;
if ($v==$tabela) $existatabela=1;
if ($existatabela==1 && $v=='ADD') $existaadd=1;
if ($existatabela==1 && $v=='MOD') $existamod=1;
}
}
?>
dar pune $existaadd=1 sau $existamod=1 si la alte tabele decit $tabela='useri';Multumesc.

MarPlo
Salut
Vezi daca iti e de folos codul din acest exemplu. Creaza dinamic intr-un array $e_vars variabile cu nume in functie de 'numetabela' si 'act', cu oricate tabele.

Cod: Selectaţi tot

$arr =[0 =>[
  0 =>['actor' => 'superuser', 'numetabela' => 'useri', 'act' => 'ADD', 'actiune' => 'adaugare', 'idusrtip' => 1, 'idactiune' => 1, 'idtabela' => 1, 'tipusr_id' => 1, 'actiune_id' => 1, 'tabel_id' => 1, 'princ' => 1],
  1 =>['actor' => 'superuser', 'numetabela' => 'echipe', 'act' => 'MOD', 'actiune' => 'modificare', 'idusrtip' => 1, 'idactiune' => 2, 'idtabela' => 7, 'tipusr_id' => 1, 'actiune_id' => 2, 'tabel_id' => 7, 'princ' => 1]
]];
$nr_arr = count($arr);

//array with [table_name=>[act_val=>1] ]
$e_vars =[];

//set items in $e_vars according to 'numetabela' and 'act'
for($i=0; $i<$nr_arr; $i++){
  foreach($arr[$i] as $k=>$v){
    $e_table = strtolower($v['numetabela']);  //name of table item in $arr
    $e_act = strtolower($v['act']);  //name of act item in $arr[$e_table]
    if(!isset($e_vars[$e_table])) $e_vars[$e_table] =[];
    $e_vars[$e_table][$e_act] =1;
  }
}

//check
var_export($e_vars);
// array ('useri' =>array('add' =>1), 'echipe' =>array('mod' =>1)) 

andras
E foarte bine si nu mai am nevoie de acele variabile intermediare ($existaadd), citesc direct din al doilea array. Pe baza datelor din acest al doilea array afisez sau nu optiunile sau butoanele din pagina in functie de tipul de user logat (rol). Multumesc!

MarPlo
Ca sa fie mai usor la folosire date din array-ul rezultat, fara nume intermediare (cu e_), ci direct 'numetabel' si valoare 'act', am modificat putin codul din exemplu dat.

andras
Am modificat si consider ca am rezolvat elegant problema accesului dinamic in aplicatie dupa tipul (rolul) userului. Tot ce imi mai ramine este sa fac o macheta in interfata Admin prin care sa definesc efectiv optiunile de acces si sa adaug inregistrarile respective in tabela relatii. SELECT-ul se face din aceasta tabela.

Subiecte similare