0

そう...

class postQuery {

public function __construct($args = NULL){

    $post_type = $args['post_type'];
    $limit = $args['limit'];
    $category = $args['cat'];

    global $sql;

    $sql = $sql->query('SELECT * FROM posts');
    $sql = $sql->fetchAll(PDO::FETCH_ASSOC);
}

public function havePosts() {

    global $sql;
    global $rowNum;

    $rowNum = 0;
    $rowMax = count($sql);

    while($rowNum <= $rowMax) {
        return $rowNum;
        $rowNum++;
    }

}
}

havePosts() 関数は、$rowNum < $rowMax の間に実行する必要があります...ここまではすべて問題ありません...

しかし今、次のように、この関数を使用して while ステートメントを作成したいと思います。

$con = new postQuery();

while($con->havePosts()){
    global $sql;
    global $rowNum;

    return $sql[$rowNum]['title'];
}

関数内で WHILE によって指定されたデータを 1 つずつ返すにはどうすればよいですか?

4

2 に答える 2

0

クラスpostQueryは次のようになります。

class postQuery() {

  private $currentRow = 0;

  public function havePosts() {
    global $sql;
    if ($this->currentRow == count($sql) - 1)
      return FALSE;
    $this->currentRow++;
    return $this->currentRow - 1;
  }
}

そして、投稿をループできます:

while(($rowNum = $conn->havePosts()) !== FALSE) {
  echo $sql[$rowNum]['title'];
}

私の例はベストプラクティスではないことに注意してください。グローバル変数と、クラス メンバー変数に保存できる大量のデータ (例: count($sql)) の使用は避ける必要があります。のような魔法の演算を使用しないように、算数も修正する必要があります$this->currentRow + 1

于 2012-12-09T13:17:49.557 に答える
0

結果を配列に入れ、後でアクセスできる配列を返します

public function havePosts() {
  global $sql;
  global $rowNum;

  $rowNum = 0;
  $rowMax = count($sql);
  $titles=array();
 while($con->havePosts()){
    global $sql;
    global $rowNum;

   $titles[]= $sql[$rowNum]['title'];
  }

  return $titles;

}

于 2012-12-09T13:24:51.173 に答える