這個遞迴函式究竟是哪裡寫錯了?

來源:互聯網
上載者:User

$user_list為0時,竟然會再次重新調用,$user_list再次為0時,才會返回$result

function count_user_order($user_list_str, $limit = 4, $times = 1){  static $result = array('users_count'=>array(), 'order_number'=>array(), 'order_amount'=>array());  $sql = 'SELECT user_id FROM '.$GLOBALS['ecs']->table('users')." WHERE parent_id IN (%s)"; // 統計顧客  $user_list = $GLOBALS['db']->getCol(sprintf($sql, $user_list_str));  $sql_order = 'SELECT SUM(order_amount) order_amount,COUNT(*) order_number FROM '  .$GLOBALS['ecs']->table('order_info')." WHERE pay_status=2 AND user_id IN (%s)"; // 統計訂單數量及金額  list($result['order_amount'][], $result['order_number'][]) = $GLOBALS['db']->getRow(sprintf($sql_order, $user_list_str));  $result['users_count'][] = count($user_list);  if ((!$limit || $times < $limit) && count($user_list)) {    $user_list_str = implode(',', $user_list);    count_user_order($user_list_str, $limit, ++$times);  }  return $result;}

或許圖片更容易看些:

回複內容:

$user_list為0時,竟然會再次重新調用,$user_list再次為0時,才會返回$result

function count_user_order($user_list_str, $limit = 4, $times = 1){  static $result = array('users_count'=>array(), 'order_number'=>array(), 'order_amount'=>array());  $sql = 'SELECT user_id FROM '.$GLOBALS['ecs']->table('users')." WHERE parent_id IN (%s)"; // 統計顧客  $user_list = $GLOBALS['db']->getCol(sprintf($sql, $user_list_str));  $sql_order = 'SELECT SUM(order_amount) order_amount,COUNT(*) order_number FROM '  .$GLOBALS['ecs']->table('order_info')." WHERE pay_status=2 AND user_id IN (%s)"; // 統計訂單數量及金額  list($result['order_amount'][], $result['order_number'][]) = $GLOBALS['db']->getRow(sprintf($sql_order, $user_list_str));  $result['users_count'][] = count($user_list);  if ((!$limit || $times < $limit) && count($user_list)) {    $user_list_str = implode(',', $user_list);    count_user_order($user_list_str, $limit, ++$times);  }  return $result;}

或許圖片更容易看些:

隨便掃了下,應該是沒有出口,就是沒有停止遞迴的條件
還有你應該把統計顧客和統計訂單數量及金額也寫成一個函數

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.