السلام .. حلك هنا .. الشرح بعدين .. اول شيء جربه
كود PHP:
<?php
function pushAsSub($root,$focus,$rootOfCurrent){
foreach($root as $key=>$value){
if(isset($rootOfCurrent[$key])){
$root[$key]['subs'] = pushAsSub($rootOfCurrent[$key],$value,$rootOfCurrent);
}
}
return $root;
}
function getResult($resourceId){
$subCats = array();
$root = array();
while($row = mysql_fetch_array($resourceId,1)){
if($row['sub']==0){
$root[$row['id']] = array('id'=>$row['id'],'sub'=>$row['sub'],'name'=>$row['name']);
}
else{
$subCats[$row['sub']][$row['id']] = array('id'=>$row['id'],'sub'=>$row['sub'],'name'=>$row['name']);
}
}
foreach($root as $key=>$value){
$root[$key]['subs'] = pushAsSub($subCats[$key],$value,$subCats);
}
return $root;
}
$db = mysql_connect('localhost','root','');
mysql_select_db('xxx',$db);
$result = mysql_query('select * from categories ORDER BY sub');
$subCatagiries = getResult($result);
echo '<pre>';
print_r($subCatagiries);
echo '</pre>';
?>
ملاحظه:
انت استخدمت مثال صعب الفهم، لانك كتبت a2 form a1 او a4 from a3 وهذا يتعب الشخص اللذي يريد ان يساعدك، فلماذا لا تستخدم هذا المثال Car => toyota => camery => green
ففي المستقبل حاول ان تضع السؤال .. وايضا اجاباتك بامثله سهل الفهم والاستخدام
فاستبدل محتوى قاعده بياناتك بهذه:
كود:
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(10) NOT NULL auto_increment,
`sub` int(10) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;
--
-- Dumping data for table `categories`
--
INSERT INTO `categories` (`id`, `sub`, `name`) VALUES
(2, 1, 'Japanies'),
(3, 2, 'toyota'),
(4, 3, 'Camery'),
(10, 4, 'Blue'),
(12, 1, 'USA'),
(11, 4, 'Green'),
(1, 0, 'cars'),
(9, 2, 'Nissan'),
(13, 12, 'FORD'),
(14, 12, 'HUMMER'),
(15, 14, 'H2'),
(16, 15, 'BLACK'),
(17, 15, 'RED');
والنتيجه
كود:
Array
(
[1] => Array
(
[id] => 1
[sub] => 0
[name] => cars
[subs] => Array
(
[2] => Array
(
[id] => 2
[sub] => 1
[name] => Japanies
[subs] => Array
(
[3] => Array
(
[id] => 3
[sub] => 2
[name] => toyota
[subs] => Array
(
[4] => Array
(
[id] => 4
[sub] => 3
[name] => Camery
[subs] => Array
(
[10] => Array
(
[id] => 10
[sub] => 4
[name] => Blue
)
[11] => Array
(
[id] => 11
[sub] => 4
[name] => Green
)
)
)
)
)
[9] => Array
(
[id] => 9
[sub] => 2
[name] => Nissan
)
)
)
[12] => Array
(
[id] => 12
[sub] => 1
[name] => USA
[subs] => Array
(
[14] => Array
(
[id] => 14
[sub] => 12
[name] => HUMMER
[subs] => Array
(
[15] => Array
(
[id] => 15
[sub] => 14
[name] => H2
[subs] => Array
(
[16] => Array
(
[id] => 16
[sub] => 15
[name] => BLACK
)
[17] => Array
(
[id] => 17
[sub] => 15
[name] => RED
)
)
)
)
)
[13] => Array
(
[id] => 13
[sub] => 12
[name] => FORD
)
)
)
)
)
)