Autorius Tema: PHP masyvo perkėlimas į JSON struktūrą  (Skaityta 2171 kartus)

Neprisijungęs Scriber

  • Naujokas
  • *
  • Įrašai: 8
  • Karma: +0/-0
    • Žiūrėti profilį
PHP masyvo perkėlimas į JSON struktūrą
« Įrašytas: 2012-10-24 07:40:07 am »
Sveiki, taigi turiu tokį klausimą :) Duombazėje turiu lentelę categories, kurioje yra laukai id, parent_id, title, level. Ir man reikia ta lentele perkelti į JSON struktūrą, kuri atrodytų maždaug taip:
{
   0: {ID: "Kategorijos_id", title: "Kategorijos pavadinimas", children: {0: {ID: "Sub'o ID", title: "Sub'o pavadinimas", children: {0: {ID: "Sub Sub'o ID", title: "Sub Sub'o pavadinimas", children{...}}, 1: {ID: "Sub Sub'o ID", title: "Sub Sub'o pavadinimas", children{...}}, 2:{ID: "Sub Sub'o ID", title: "Sub Sub'o pavadinimas", children{...}} }}, 1: {ID: "Sub'o ID", title: "Sub'o pavadinimas"}} }
  1: ...
}

Na ir t.t.
Žodžiu čia yra kategorijų hierarchija ir jų gylis(level) neribojamas. Ir man reikia jas sudėti į php masyvą, kurį galėčiau encodinti į JSON, kaip matote viršutiniame pavyzdyje. Taigi norėčiau paklausti patarimų, kaip tai padaryti?

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: PHP masyvo perkėlimas į JSON struktūrą
« Atsakymas #1 Įrašytas: 2012-10-24 08:46:48 am »
Gali maždaug šitaip, jeigu nenori naudot rekursijos duombazės lygyje (čia naudoju native mysql, geriau naudot kokį wrapperį):
<?php

$construct_tree 
= function(&$result$cats$relations_cats$ids$depth) use (&$construct_tree) {
if (is_array($ids) && count($ids) > 0):
// iteruojam per visus paduotus id (tariamai vaikinius ID einamojo elemento)
foreach($ids as $id):
if (!isset($cats[$id])) {
$result = array();
continue;
}
$current_cat $cats[$id]; // randam einamaja kategorija

// uzsetinam einamosios kategorijos duomenis i rezultatu masyva
$result['id'] = $current_cat['id'];
$result['name'] = $current_cat['name'];
$result['depth'] = $depth;
$result['children'] = array();

if (isset($relations_cats[$id])): // jeigu einamasis elementas turi vaiku - iskvieciam patys save, 
  // tuos pacius veiksmus padarom kiekvienam is vaiku
$children $cats[$id];
$construct_tree($result['children'], $cats$relations_cats$children$depth+1);
endif;
endforeach;
endif;
};

$result mysql_query("SELECT id, parent_id, name, level FROM categories");

// suvaliduoji $result

$cats = array(); // masyvas, kuriame saugomos kategorijos. Raktas - kategorijos ID
$relations_cats = array(); // cia saugosim pseudo hierarchine struktura, kur elemento raktas - tevinis ID, o elementas - pats kategorijos ID

while ($row mysql_fetch_assoc($result)):
$cats[$row['id']] = $row;
$relations_cats[$row['parent_id']][] = $row['id'];
endwhile;

$kategoriju_struktura = array();
$construct_tree($kategoriju_struktura$cats$relations_cats, array(0), 0); // pradedam nuo 0 tevo (nuo elementu, neturinciu tevo)

print_r($kategoriju_struktura);
/*
Array(
0 => Array(
'id' => 1,
'name' => 'Super kategorija 1',
'depth' => 0,
'children' => Array(
0 => Array (
'id' => 3,
'name' => 'Subkategorija 2',
'depth' => 1,
'children' => Array( )
),
1 => Array (
'id' => 4,
'name' => 'Subkategorija 3',
'depth' => 1,
'children' => Array( )
)
)
),
1 => Array(
'id' => 5,
'name' => 'Super kategorija 2',
'depth' => 0,
'children' => Array( )
)
)
*/

print json_encode($kategoriju_struktura); // isvedam json'a

?>

Gal iš pradžių bus sunku kodą suprast, bet pasigilink. Klausk, jeigu kažkas tiksliai neaišku.

Neprisijungęs Scriber

  • Naujokas
  • *
  • Įrašai: 8
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: PHP masyvo perkėlimas į JSON struktūrą
« Atsakymas #2 Įrašytas: 2012-10-25 13:16:11 pm »
Dėkoju už pagalbą, šiek tiek paredagavus kodą viskas veikia tiesiog puikiai.

Neprisijungęs Lukas

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7431
  • Karma: +232/-15
    • Žiūrėti profilį
Ats: PHP masyvo perkėlimas į JSON struktūrą
« Atsakymas #3 Įrašytas: 2012-10-26 10:26:02 am »
Dėkoju už pagalbą, šiek tiek paredagavus kodą viskas veikia tiesiog puikiai.
gal gali ideti galini varianta, veikianti koda kitiems zmonems?
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Gerda Photography
Serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Manualai.lt Forumas

Ats: PHP masyvo perkėlimas į JSON struktūrą
« Atsakymas #3 Įrašytas: 2012-10-26 10:26:02 am »

Neprisijungęs Scriber

  • Naujokas
  • *
  • Įrašai: 8
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: PHP masyvo perkėlimas į JSON struktūrą
« Atsakymas #4 Įrašytas: 2012-10-26 10:32:41 am »
Taip, vėliau galėsiu įdėti.

Manualai.lt Forumas

Ats: PHP masyvo perkėlimas į JSON struktūrą
« Atsakymas #4 Įrašytas: 2012-10-26 10:32:41 am »