Preluare date multiple JSON dintr-o coloana

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

Preluare date multiple JSON dintr-o coloana

Salut, cum as putea prelua datele dintr-o coloana din baza de date care sunt in format JSON?

Valoarea din coloana `articole`

Cod: Selectaţi tot

{
   "afisare":[
      {
         "afisare_articole":1,
         "afisare_vizualizari":1,
         "afisare_aprecieri":1,
         "afisare_autor":1,
         "afisare_data":1,
         "afisare_comentarii":1,
         "afisare_categorii":1,
         "afisare_taguri":1,
         "afisare_postari":1,
         "afisare_search":1
      }
   ],
   "permitere":[
      {
         "permitere_aprecieri":1,
         "permitere_comentarii":1
      }
   ]
}
Codul pe care l-am folosit am observat ca imi returneaza doar datele de la "permitere", de ce?

Cod: Selectaţi tot

$array = json_decode($date_website['articole'], true);
$data=array();
foreach($array as $val){
	foreach($val as $key=>$val){
		$info[$key]=$val;
	}
}
	
print_r($info);

MarPlo
Sunt doua probleme la codul php.
1. Variabila $val din al doilea foreach() o rescrie pe cea din primul.
2. Datele dorite nu sunt retinute in variabila definita initial, $data, ci in una care se auto-rescrie $info.

Incearca asa:

Cod: Selectaţi tot

$array = json_decode($date_website['articole'], true);
$data = array();
foreach($array as $val){
  foreach($val as $k=>$v){
    $data[$k]=$v;
  }
}

var_export($data);

Stefan
Tot la fel afiseaza, dar daca mut functia var_export in al 2-lea foreach imi afiseaza toate datele. Si am observat ca imi returneaza 2 array-uri, nu ar trebui sa fie un singur array?

Cod: Selectaţi tot

$array = json_decode($date_website['articole'], true);
	$data = array();
	foreach($array as $val){
	  foreach($val as $k=>$v){
		$data[$k]=$v;
		var_export($data);
	  }
	}
Rezultat

Cod: Selectaţi tot

array (
  0 => 
  array (
    'afisare_articole' => 1,
    'afisare_vizualizari' => 1,
    'afisare_aprecieri' => 1,
    'afisare_autor' => 1,
    'afisare_data' => 1,
    'afisare_comentarii' => 1,
    'afisare_categorii' => 1,
    'afisare_taguri' => 1,
    'afisare_postari' => 1,
    'afisare_search' => 1,
  ),
)
array (
  0 => 
  array (
    'permitere_aprecieri' => 1,
    'permitere_comentarii' => 1,
  ),
)int(1)
Pana la urma vad ca pot prelua datele asa, dar nu inteleg de ce metoda de mai sus nu functioneaza

Cod: Selectaţi tot

var_dump($array['afisare'][0]['afisare_articole']);

MarPlo
Da, de fapt acel json contine trei array-uri imbricate; variabila $val de la primul foreach() contine un array bidimensional.
Incearca acest cod:

Cod: Selectaţi tot

$array = json_decode($date_website['articole'], true);
$data = array();
foreach($array as $val){
  foreach($val[0] as $k=>$v){
    $data[$k]=$v;
  }
}

var_export($data);

Stefan
Iti multumesc mult! Si cum as putea face update mai multor date dupa trimiterea formularului (folosesc un input de tip checkbox)? Momentan pentru a face update unei singure coloane foloseam comanda urmatoare

Cod: Selectaţi tot

mysqli_query($con, "UPDATE `setari` SET `articole` = JSON_SET(`articole`,'$.afisare[0].afisare_comentarii',123)");

MarPlo
Nu stiu, depinde de mai multi factori:
- structura tabelului,
- ce coloane, ce date si cu ce sa le modifici,
- ce formular ai pentru ele.

Daca nu sunt multe, cu zecile, mai bine faci update la fiecare in parte.

Subiecte similare