странная фигня с многомерным массивом

Lazarius

Новичок
странная фигня с многомерным массивом

Привет
Вот такая ботва, return тоже соответсвенно ничего не возвращает.

PHP:
function Draw_Menu($db, $menu, $a_razd)
{
$razdels = implode (",", $a_razd);

$query = "SELECT id, name, mnemo FROM shop_razdel WHERE id IN (".$razdels.")";
$result_r = mysql_query($query, $db);

while ($razdel = mysql_fetch_array($result_r))
       {
       $query = "SELECT id, name, mnemo, id_razdel FROM shop_podrazdel
                WHERE id_razdel='$razdel[id]' AND NOT hidden ORDER BY name";
       $result_p = mysql_query($query, $db);

       while ($podrazdel = mysql_fetch_array($result_p))
              {
              $razdel["podrazdels"][] = $podrazdel;
              }
              print_r($razdel); // здесь выводится дамп переменной
       }
print_r($razdel); // здесь ничего не выводится
//return $razdel;
}
Только не отсылайте в на "отладка", "ничего не работает, что делать?"
 

Gorynych

Посетитель PHP-Клуба
Lazarius
да все потому, что у Вас дурацкий способ форматирования кода
Код:
...
$result_r = mysql_query($query, $db);

while ($razdel = mysql_fetch_array($result_r)) {
    // переменная $result определена и инициализируется
    // как результат mysql_fetch_array($result_r)
    // 
    // цикл while выполняется ДО ТЕХ пор, 
    // пока есть возращаемое значение

    $query = "SELECT id, name, mnemo, id_razdel FROM shop_podrazdel
                WHERE id_razdel='$razdel[id]' AND NOT hidden ORDER BY name";
    $result_p = mysql_query($query, $db);

    while ($podrazdel = mysql_fetch_array($result_p)) {
        $razdel["podrazdels"][] = $podrazdel;
    }
    print_r($razdel); // здесь выводится дамп переменной
}

// конечно здесь уже ничего НЕ ВЫВОДИТСЯ, 
// иначе бы продолжался цикл while 
print_r($razdel); // здесь ничего не выводится
...
 

Lazarius

Новичок
Автор оригинала: Gorynych
Lazarius
да все потому, что у Вас дурацкий способ форматирования кода
Код:
...
$result_r = mysql_query($query, $db);

while ($razdel = mysql_fetch_array($result_r)) {
    // переменная $result определена и инициализируется
    // как результат mysql_fetch_array($result_r)
    // 
    // цикл while выполняется ДО ТЕХ пор, 
    // пока есть возращаемое значение

    $query = "SELECT id, name, mnemo, id_razdel FROM shop_podrazdel
                WHERE id_razdel='$razdel[id]' AND NOT hidden ORDER BY name";
    $result_p = mysql_query($query, $db);

    while ($podrazdel = mysql_fetch_array($result_p)) {
        $razdel["podrazdels"][] = $podrazdel;
    }
    print_r($razdel); // здесь выводится дамп переменной
}

// конечно здесь уже ничего НЕ ВЫВОДИТСЯ, 
// иначе бы продолжался цикл while 
print_r($razdel); // здесь ничего не выводится
...
ну вообще после цикла идет распечатка дампа переменной, которая сформировалась за цикл, или вне цикла переменные обнуляются? :D

var_dump выводит boolean(false) помоему, просто сейчас с кпк сижу, нет возможности проверить
 

SelenIT

IT-лунатик :)
Lazarius
ладно, тогда при каком условии у тебя прерывается внешний цикл while?
 

Фанат

oncle terrible
Команда форума
SelenIT
я думаю, стоит отложить разговор до тех пор, пока человек не будет за компом с веб-сервером.
иначе только трафик у него потратится зря
 

SelenIT

IT-лунатик :)
а мне кажется, код на виду и логика элементарная - так чего тянуть?

var_dump выводит boolean(false) помоему
Совершенно верно. Именно такое значение дает mysql_fetch_array, когда получать из базы больше нечего. На этом цикл и кончается.
 

Lazarius

Новичок
:) Блин посмотрел утром на код и понял, что за глупость я сделал... Да, изввинияюсь тяжелый день вчера был. Всем спасибо.
PHP:
function Draw_Menu($db, $menu, $a_razd) 
{ 
$razdels = implode (",", $a_razd); 

$query = "SELECT id, name, mnemo FROM shop_razdel WHERE id IN (".$razdels.")"; 
$result_r = mysql_query($query, $db); 

while ($razdel = mysql_fetch_array($result_r)) 
       { 
       $query = "SELECT id, name, mnemo, id_razdel FROM shop_podrazdel 
                WHERE id_razdel='$razdel[id]' AND NOT hidden ORDER BY name"; 
       $result_p = mysql_query($query, $db); 

       while ($podrazdel = mysql_fetch_array($result_p)) 
              { 
              $razdel["podrazdels"][] = $podrazdel; 
              }
$ret_val[] = $razdel; 
       } 
return $ret_val; 
}
 

0xHH

Новичок
shop_razdel, shop_podrazdel выводить через 1 select. Они идентичны. Представь себе, что первый select отдаёт 1000000 записей. Понадобится 1000000 запросов к базе? Зачем? Представь это всё в виде одного запроса.
 
Сверху