使用mysql_fetch_array()和foreach()而不是while()

Ibr*_*mar 4 php

我想知道如何将以下代码转换为与foreach一起使用

$query_select = "SELECT * FROM shouts ORDER BY id DESC LIMIT 8;"; 

    $result_select = mysql_query($query_select) or die(mysql_error());

    while($row = mysql_fetch_array($result_select)) {
        $ename = stripslashes($row['name']);
        $eemail = stripcslashes($row['email']);
        $epost = stripslashes($row['post']);
        $eid = $row['id'];

        $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=".md5(strtolower($eemail))."&size=70";

        echo ('<img src = "' . $grav_url . '" alt="Gravatar">'.'<br/>');

        echo $eid . '<br/>';

        echo $ename . '<br/>';

        echo $eemail . '<br/>';

        echo $epost . '<br/><br/><br/><br/>';
Run Code Online (Sandbox Code Playgroud)

Ban*_*Dao 10

你可以像这样编码:

$query_select = "SELECT * FROM shouts ORDER BY id DESC LIMIT 8;";
$result_select = mysql_query($query_select) or die(mysql_error());
$rows = array();
while($row = mysql_fetch_array($result_select))
    $rows[] = $row;
foreach($rows as $row){ 
    $ename = stripslashes($row['name']);
    $eemail = stripcslashes($row['email']);
    $epost = stripslashes($row['post']);
    $eid = $row['id'];

    $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=".md5(strtolower($eemail))."&size=70";

    echo ('<img src = "' . $grav_url . '" alt="Gravatar">'.'<br/>');

    echo $eid . '<br/>';

    echo $ename . '<br/>';

    echo $eemail . '<br/>';

    echo $epost . '<br/><br/><br/><br/>';
}
Run Code Online (Sandbox Code Playgroud)

如您所见,从mysql_fetch_array获取数据时仍需要循环

  • 你不能.**Foreach**是一个用于存在数组的循环,用于遍历每个项目.要获取数据,需要**while循环**(或**for**).http://php.net/manual/en/control-structures.foreach.php (3认同)

cin*_*ada 6

没有一种好方法可以将它转换为foreach,因为mysql_fetch_array()只需从中获取下一个结果$result_select.如果你真的想要foreach,你可以先把所有的结果拉成一个数组,做如下的事情:

$result_list = array();
while($row = mysql_fetch_array($result_select)) {
   result_list[] = $row;
}

foreach($result_list as $row) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

但是我没有理由这样做 - 而你仍然必须使用while循环,由于mysql_fetch_array()工作原理这是不可避免的.为什么使用foreach()这么重要?

编辑:如果这只是为了学习目的:你不能将其转换为foreach.你必须有一个预先存在的数组来使用a foreach()而不是a while(),并且mysql_fetch_array()每次调用都会获取一个结果 - 没有预先存在的数组foreach()可以迭代.