cookiejest
asked on
using php to display hierarchical data for use in javascript..
Hi there, I am storing hierarchical data in my mysql database using the method described here:
http://www.sitepoint.com/article/hierarchical-data-database/2/
However i am trying to do something slightly different when the data is extracted as i want php to output the information in the format shown below so i can use the data in a javascript widget i found. At the moment my php function creates an array with all the subordinate data and then it can be reached like so:
$treeinfo = display_tree(1);
foreach($treeinfo as $row) {
$row['zone_ID'];
$row['zone_Parent_ID'];
$row['nright'];
$row['nleft'];
$row['zone_Name'];
$row['zone_indent']; //depth of zone
$row['descendants']; //number of child zones
}
Can someone have a pop at doing this because ive been trying for hours and my head is now spinning! Thanks a bunch
http://www.sitepoint.com/article/hierarchical-data-database/2/
However i am trying to do something slightly different when the data is extracted as i want php to output the information in the format shown below so i can use the data in a javascript widget i found. At the moment my php function creates an array with all the subordinate data and then it can be reached like so:
$treeinfo = display_tree(1);
foreach($treeinfo as $row) {
$row['zone_ID'];
$row['zone_Parent_ID'];
$row['nright'];
$row['nleft'];
$row['zone_Name'];
$row['zone_indent']; //depth of zone
$row['descendants']; //number of child zones
}
Can someone have a pop at doing this because ive been trying for hours and my head is now spinning! Thanks a bunch
var treeData = [
{title: "Web & Programming", isFolder: true, key: "ZONE_ID",
children: [
{title: "PHP",
children: [
{title: "PHP 4", key: "zone_ID" },
{title: "PHP 5", key: "zone_ID" }
]
},
{title: "Sub-item 3.2",
children: [
{title: "Sub-item 3.2.1", key: "id3.2.1" },
{title: "Sub-item 3.2.2", key: "id3.2.2" }
]
}
]
},
{title: "Design & Multimedia", isFolder: true, key: "ZONE_ID",
children: [
{title: "Flash",
children: [
]
},
{title: "Photoshop",
children: [
{title: "Sub-item 3.2.2", key: "id3.2.2" }
]
}
]
},
];
ASKER
sure, here is sql for the data im using to test, if you need it in another format then i can provide it,
it should be a structure like so:
Webofwork
Web Design
Flash
actionscript
PHP
AJAX
Tax Guidence
it should be a structure like so:
Webofwork
Web Design
Flash
actionscript
PHP
AJAX
Tax Guidence
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `webofworkdb`
--
-- --------------------------------------------------------
--
-- Table structure for table `zones`
--
CREATE TABLE IF NOT EXISTS `zones` (
`zone_ID` int(11) NOT NULL AUTO_INCREMENT,
`zone_Name` varchar(45) NOT NULL,
`zone_Description` text NOT NULL,
`zone_Parent_ID` int(11) DEFAULT NULL,
`nleft` int(11) DEFAULT NULL,
`nright` int(11) DEFAULT NULL,
`nlevel` int(11) DEFAULT NULL,
`zone_Date_Added` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`zone_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='zones within the database' AUTO_INCREMENT=10 ;
--
-- Dumping data for table `zones`
--
INSERT INTO `zones` (`zone_ID`, `zone_Name`, `zone_Description`, `zone_Parent_ID`, `nleft`, `nright`, `nlevel`, `zone_Date_Added`) VALUES
(1, 'Web Of Work', 'All the cats in web of work', NULL, 1, 16, NULL, '2009-07-03 14:42:33'),
(2, 'Web Design', 'Stuff about webdesign', 1, 2, 11, NULL, '2009-07-03 14:42:33'),
(3, 'Finance and Management', 'hbhggv', 1, 12, 15, NULL, '2009-07-03 14:47:14'),
(4, 'flash', '', 2, 3, 6, NULL, '2009-07-03 14:48:06'),
(6, 'Tax Guidence', 'stuff about tax', 3, 13, 14, NULL, '2009-07-03 15:54:45'),
(7, 'actionscript', '', 4, 4, 5, NULL, '2009-07-04 11:02:20'),
(8, 'php', 'all about php', 2, 7, 8, NULL, '2009-07-08 22:36:19'),
(9, 'ajax', 'all about ajax', 2, 9, 10, NULL, '2009-07-08 22:36:19');
ASKER
Sorry ive just realised an error, the mysql i gave you is for data that would look like this:
Webofwork
Web Design
Flash
actionscript
PHP
AJAX
Finance and Management
Tax Guidence
Webofwork
Web Design
Flash
actionscript
PHP
AJAX
Finance and Management
Tax Guidence
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
thank you for replying! I am geteting these errors:
Warning: Call-time pass-by-reference has been deprecated in C:\wamp\www\webofwork.com\ new_projec t.php on line 109
Warning: Call-time pass-by-reference has been deprecated in C:\wamp\www\webofwork.com\ new_projec t.php on line 115
Parse error: parse error, expecting `T_VARIABLE' or `'$'' in C:\wamp\www\webofwork.com\ new_projec t.php on line 144
Warning: Call-time pass-by-reference has been deprecated in C:\wamp\www\webofwork.com\
Warning: Call-time pass-by-reference has been deprecated in C:\wamp\www\webofwork.com\
Parse error: parse error, expecting `T_VARIABLE' or `'$'' in C:\wamp\www\webofwork.com\
ASKER
right ive modified the code to remove those errors and its not throwing up anything else, im still not sure how to get from this stage to my final output..
print_r(ReOrderArray($treeinfo));
//DS: first prep the array to a proper multi-dimensional array
function ReOrderArray($treeinfo){
$aOrganisedTree = array();
//DS: make top-level (the ones without a parent)
foreach($treeinfo as $key=>$row) {
$row['zone_ID'];
$row['zone_Parent_ID'];
$row['nright'];
$row['nleft'];
$row['zone_Name']; //title
$row['zone_indent']; //depth of zone
$row['descendants']; //number of child zones
if(!isset($row['zone_Parent_ID']) ||$row['zone_Parent_ID']== ''){ //DS: top level
$aOrganisedTree[$key] = $row;
unset($treeinfo);
}
}
PlaceChildren($treeinfo, $aOrganisedTree);
return $aOrganisedTree;
}
function PlaceChildren($treeinfo, $aOrganisedTree){
while(!empty($treeinfo)){
LoopThroughArr(treeinfo, $aOrganisedTree);
}
}
function LoopThroughArr($array, $aOrganisedTree){
foreach($array as $key => $value){
}
return $arrResult;
}
//DS: search for id and return the path to it.
function array_searchRecursive( $needle, $haystack, $strict=false, $path=array()){
if( !is_array($haystack) ) {
return false;
}
foreach($haystack as $key => $val ) {
if( is_array($val) && $subPath = array_searchRecursive($needle, $val, $strict, $path) ) {
$path = array_merge($path, array($key), $subPath);
return $path;
} elseif( (!$strict && $val == $needle) || ($strict && $val === $needle) ) {
$path[] = $key;
return $path;
}
}
return false;
}
ASKER
had a few issues but got it working!
I have made some recursive functions i'd like to test.