解决方案 »

  1.   

    因为你number_show没有清空,第一个记录获取到的一直在,所以后面就都有了。
      

  2.   

    另外
    while($row=$GLOBALS['db']->fetch_array($sql)){
       if($row){
    $row已经是在While的条件里了,没必要再加个if判断了,因为如果这个If是假的话,根本就进不了while了。
      

  3.   

    function get_number_list($cat_id)
    {
     $sql=$GLOBALS['db']->query("select * from ".$GLOBALS['db']->table('dept_category')." order by sort");
     while($row=$GLOBALS['db']->fetch_array($sql)){
       if($row){
       $result=$GLOBALS['db']->query("select * from ".$GLOBALS['db']->table('number')." where dept=".$row['cat_id']." and cat_id='$cat_id' order by sort");
         while($rows=$GLOBALS['db']->fetch_array($result)){
            if($rows){
           $number_show[] = array(
                  'id' => $rows['id'],
                  'title' => $rows['title'],
                  'user' => $rows['username']
           );
          }
         }
            $cat_name[]=array(
              'sort' => $row['sort'],
              'cat_name' => $row['cat_name'],
              'topid' => $number_show
         );
        unset($number_show);
         }
       }
       return $cat_name;
       unset($cat_name);
     }利用unset对数组进行清空。