我有一个简单的函数checkReplies()
来检查reply_id
,如果reply_id
不等于0
,则会调用自己并再次检查。现在我需要为它生成的输出创建一个数组f,但我无法做到,数组只输出最后一个元素
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);
如何创建输出数组?
答案 0 :(得分: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);
答案 1 :(得分:1)
试试这个
$r_notes = array_merge($r_notes, checkReplies( $rslt_rn[0]['reply_note_id'] ));
而不是
$r_notes[] = $reply;
checkReplies( $rslt_rn[0]['reply_note_id'] );
我编辑了,抱歉错误。