3

こんにちは、php で while ループを使用して関数を作成しようとしていますが、ここに書き込めません。これが私のコードです。

 function mail_detail($mail_detail){

    $data= mysql_query("select * from messages where messages.to = '$mail_detail' and to_viewed = 0 ORDER BY messages.id DESC");
    while ($result= mysql_fetch_array($data)){
    return $result;
    }

}

出力は

$mail_detail= mail_detail($userid)
echo '<li class="read">

               <a href="#">
                 <span class="message">'. $mail_detail['title'].'</span>
                    <span class="time">
                       January 21, 2012
                   </span>
                                </a>
        </li>';

私はすべての値を取得していません.1つの値を取得しているだけです.thxを助けてください.

4

3 に答える 3

9

ステートメントはreturnループを終了し、関数を終了しています。

すべての値を取得するには、それらをループ内の配列に追加してから、配列を返します。このような:

$results = array();

while ($result = mysql_fetch_array($data)) {
    $results[] = $result;   
}

return $results;

配列を受け取る側

$msgArray = mail_detail($mail_detail);

foreach($msgArray as $msg) {
    //use $msg
}

さらに、関数は 1 回しか戻ることができません (心配する必要のない特別な状況を除いて)。したがって、関数が最初に return ステートメントに遭遇すると、値を返して終了します。

のこの機能は、return多くの場合、有利に使用できます。例えば:

function doSomething($code = NULL) 
{
    if ($code === NULL) {
        return false;
    }

    //any code below this comment will only be reached if $code is not null
    // if it is null, the above returns statement will prevent control from reaching 
    // this point

    writeToDb($code);
}
于 2012-05-23T06:12:24.100 に答える
0
function mail_detail($mail_detail){
    $returnArr = array();
    $data= mysql_query("select * from messages where messages.to = '$mail_detail' and to_viewed = 0 ORDER BY messages.id DESC");
    while ($result= mysql_fetch_array($data)){
        $returnArr[] = $result;
    }
    return $returnArr;

}

このようにして、返されたすべてのものを 1 つの配列にプッシュし、ループが終了すると配列全体が返されるため、返されます。xbones が言ったように、return はループを壊します!

于 2012-05-23T06:15:08.053 に答える