0

checkReplies()をチェックし、が と等しくない場合はreply_id、自分自身を呼び出して再度チェックする単純な関数があります。ここで、生成する出力用の配列を作成する必要がありますが、それを行うことができません。配列は最後の要素のみを出力しますreply_id0

function checkReplies( $rnid ){
    $r_notes = array();
    include_once('include/class.dbc.php');
    $dbo=new dbc();
    $db=$dbo->dbconnect();
    if( $rnid > 0 ): 
    $qry_rn = "SELECT note_subject,note_body,reply_note_id FROM tbl_notes WHERE note_id = '$rnid' ORDER BY note_date DESC";
    $rslt_rn = $dbo->executeQuery( $qry_rn );
    $reply = '<p style="border : none;">';
    $reply .= $rslt_rn[0]['note_subject'].'<br />'.$rslt_rn[0]['note_body'];
    $reply .= '('.$rslt_rn[0]['reply_note_id'].')';
    $reply .= '</p>';

    echo $reply;
    $r_notes[] = $reply;
    checkReplies( $rslt_rn[0]['reply_note_id'] );
    endif;
    return $r_notes;
}
$display = checkReplies( $rnid );
var_dump($display);

出力の配列を作成する方法は?

4

2 に答える 2

1

関数のオプションのパラメーターとして配列を指定するだけです。そして、関数の再帰呼び出しを返します。

ほとんどすべての再帰関数は同じ方法で構築されます: 最初に、再帰性を停止または継続させる条件: これは「終了ケース」と呼ばれます。次に、このブレーク条件が真でない場合は、やるべきことを行い、関数の再帰呼び出しを返します。

function checkReplies( $rnid, &$r_notes = array() ){

    include_once('include/class.dbc.php');
    $dbo=new dbc();
    $db=$dbo->dbconnect();

    if($rnid == 0)
            return $r_notes;

    $qry_rn = "SELECT note_subject,note_body,reply_note_id FROM tbl_notes WHERE note_id = '$rnid' ORDER BY note_date DESC";
    $rslt_rn = $dbo->executeQuery( $qry_rn );

    $reply = '<p style="border : none;">';
    $reply .= $rslt_rn[0]['note_subject'].'<br />'.$rslt_rn[0]['note_body'];
    $reply .= '('.$rslt_rn[0]['reply_note_id'].')';
    $reply .= '</p>';

    echo $reply;

    $r_notes[] = $reply;

    return checkReplies( $rslt_rn[0]['reply_note_id'], $r_notes );

}


$display = checkReplies( $rnid );

var_dump($display);
于 2013-09-24T09:25:17.487 に答える