14-02-2011, 21:46
|
|
|
חבר מתאריך: 06.06.07
הודעות: 749
|
|
סידור מערך בשלוש רמות
מה המצב
אני ממשיך פה דיון קטן שפתחתי בפורום מסדי נתונים
בפורום שאלתי על פרוצדורה כדי להחזיר נתונים לדוגמה תפריט בעל 3 רמות
הציעו לי לא להשתמש בפרוצדורה אלה בשאילתא אחת להביא את כל התפריט ולסדר את הרמות בקוד
זה הקוד הכי טוב שהצלחתי לעשות
קוד PHP:
$arr = array(
array('id' => 1, 'parent' => 0),
array('id' => 2, 'parent' => 0),
array('id' => 3, 'parent' => 0),
array('id' => 4, 'parent' => 1),
array('id' => 5, 'parent' => 2),
array('id' => 6, 'parent' => 1),
array('id' => 7, 'parent' => 4),
array('id' => 8, 'parent' => 3),
array('id' => 9, 'parent' => 3),
);
echo '<pre>';print_r($arr);'</pre>';
$menu = array();
foreach ($arr as $key => $value)
{
if($value['parent'] == 0)
{
$new = array('level_1' => $value, 'sub_menu' => array());
array_push($menu, $new);
unset($arr[$key]);
}
}
foreach ($menu as $k => $level_1)
{
foreach ($arr as $key => $value)
{
if($level_1['level_1']['id'] == $value['parent'])
{
$new = array('level_2' => $value, 'level_3' => array());
array_push($menu[$k]['sub_menu'], $new);
unset($arr[$key]);
}
}
}
foreach ($menu as $k1 => $level_1)
{
foreach ($level_1['sub_menu'] as $k2 => $level_2)
{
foreach ($arr as $key => $value)
{
if($level_2['level_2']['id'] == $value['parent'])
{
array_push($menu[$k1]['sub_menu'][$k2]['level_3'], $value);
unset($arr[$key]);
}
}
}
}
echo '<pre>';print_r($menu);'</pre>';
echo '<pre>';print_r($arr);'</pre>';
אשמח לעזרה בשיכתוב אם אפשר לשדרג אותו
תודה
|