代码之家  ›  专栏  ›  技术社区  ›  Ibrahim Azhar Armar

将mysql\u fetch\u array()与foreach()而不是while()一起使用

php
  •  5
  • Ibrahim Azhar Armar  · 技术社区  · 15 年前

    $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/>';
    
    5 回复  |  直到 15 年前
        1
  •  10
  •   Bang Dao    15 年前

    您可以这样编码:

    $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/>';
    }
    

    从mysql\u fetch\u数组获取数据仍然需要一个循环

        2
  •  6
  •   cincodenada    15 年前

    mysql_fetch_array() 只是从中获取下一个结果 $result_select . 如果你 真正地 如果想要foreach,可以先将所有结果拉入一个数组,执行以下操作:

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

    mysql\u fetch\u array()

    编辑: 如果这只是为了学习:你不能把它转换成 foreach . 必须有一个预先存在的数组才能使用 foreach() while() mysql\u fetch\u array() 每次调用获取一个结果-没有预先存在的数组 foreach() 迭代。

        3
  •  0
  •   MooGoo    15 年前

    foreach 需要有一个数组,其中包含查询结果中的每一行。一些PHP数据库库提供了 fetch_all mysql (然而 mysqli 分机没有)。你当然可以自己写,就像这样

    function mysql_fetch_all($result) {
       $rows = array();
       while ($row = mysql_fetch_array($result)) {
         $rows[] = $row;
       }
       return $rows;
    }
    

    foreach (mysql_fetch_all($result) as $row)
    

    while ($row = mysql_fetch_array($result))
    

    while 同样简洁,可读性更强。

    编辑 还有另一种选择,但这是相当荒谬的。你可以用这个 Iterator Interface

    class MysqlResult implements Iterator {
      private $rownum = 0;
      private $numrows = 0;
      private $result;
    
      public function __construct($result) {
        $this->result = $result;
        $this->numrows = mysql_num_rows($result);
      }
    
      public function rewind() {
        $this->rownum = 0;
      }
    
      public function current() {
        mysql_data_seek($this->result, $this->rownum);
        return mysql_fetch_array($this->result);
      }
    
      public function key() {
        return $this->rownum;
      }
    
      public function next() {
        $this->rownum++;
      }
    
      public function valid() {
        return $this->rownum < $this->numrows ? true : false;
      }
    }
    
    $rows = new MysqlResult(mysql_query($query_select));
    
    foreach ($rows as $row) {
      //code...
    }
    

    MysqlResult 实例仅在请求时获取行,就像 虽然

    但你问我能不能不用 虽然 for 我想是的)。好吧 就这样吧。是否 一切由你决定。

        4
  •  0
  •   just somebody    15 年前

    最明显的方法 foreach http://www.php.net/~helly/php/ext/spl/

        5
  •  0
  •   Hi I'm SID    7 年前

    $query_select = "SELECT * FROM shouts ORDER BY id DESC LIMIT 8;"; 
    
    $result_select = mysql_query($query_select) or die(mysql_error());
    
     foreach($result_select 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/>';
     }
    
    推荐文章