0

わかりました。なぜこれが機能しないのかわかりません。おそらく、紳士の1人が私を助けてくれるでしょう。

$new_upline = RetrieveUpline($root_referral_id, array());
echo ("The upline after return: <BR>");
var_dump ($new_upline);

function RetrieveUpline($root_ref_id, $upline){
    $referrer = mysql_query("SELECT id, username, referral_ID, total_points_earned,   isbanned FROM members WHERE id = ".$root_ref_id);
    $rows = mysql_num_rows($referrer);
    $upline_size = count($upline);

    if ($rows>0){
        while($feed = mysql_fetch_array($referrer, MYSQL_ASSOC)){
            $upline[$upline_size] = $feed;
            RetrieveUpline($upline[$upline_size]['referral_ID'], $upline);
        }
    }else{
        echo ("The upline before return: <BR>");
        var_dump($upline);
        return $upline;
    }
}

関数内のvar_dumpは期待どおりに機能します。生のテキストに設定しても、戻り値は何も返しません。たぶん簡単なことだと思いますが、今は燃え尽きています。

4

2 に答える 2

1

このバージョンを試してください:

<?php

  function RetrieveUpline($root_ref_id, $upline = array()) {

    // Sanitize input
    $root_ref_id = (int) $root_ref_id;

    // Do query
    $query = "
      SELECT id, username, referral_ID, total_points_earned, isbanned
      FROM members
      WHERE id = $root_ref_id
    ";
    $result = mysql_query($query); // What if this query fails? Add error handling here...

    // Loop results
    while ($feed = mysql_fetch_assoc($result)) {
      $upline[] = $feed;
      $upline = RetrieveUpline($feed['referral_ID'], $upline);
    }

    // Free mysql result resource
    mysql_free_result($result);

    // Return new array
    return $upline;

  }

  $new_upline = RetrieveUpline($root_referral_id);
  var_dump($new_upline);

参照によって引数を渡すか$upline、結果があるかどうかに関係なく、いずれかのオプションから結果を返す必要があります。関数を呼び出す前に結果配列を初期化する必要がないことを意味するため、結果ごとに返すオプションを選択します。このアプローチの欠点は、かなり多くのメモリを消費することです。そのため、代わりにこのバージョンを使用できます。

<?php

  function RetrieveUpline($root_ref_id, &$upline) {

    // Make sure $upline is an array (for first iteration)
    if (!is_array($upline)) $upline = array();

    // Sanitize input
    $root_ref_id = (int) $root_ref_id;

    // Do query
    $query = "
      SELECT id, username, referral_ID, total_points_earned, isbanned
      FROM members
      WHERE id = $root_ref_id
    ";
    $result = mysql_query($query); // What if this query fails? Add error handling here...

    // Loop results
    while ($feed = mysql_fetch_assoc($result)) {
      $upline[] = $feed;
      RetrieveUpline($feed['referral_ID'], $upline);
    }

    // Free mysql result resource
    mysql_free_result($result);

  }

  RetrieveUpline($root_referral_id, $new_upline);
  var_dump($new_upline);
于 2012-04-20T15:46:36.910 に答える
0

それが問題ではないことはわかっていますが、「階層データ」の取得とその操作について何か読む必要があるかもしれません。あなたの今のやり方はとても... 「遅い」と言わせてください。

于 2012-04-20T17:09:55.537 に答える