循环像Wordpress一样的函数has_posts

时间:2013-12-13 21:36:34

标签: php wordpress function while-loop

我正在尝试循环一个函数,而类似于WordPress。我使用该函数返回一个true或false的布尔值。现在这是我的功能。现在,只有它返回true或false,我知道我必须让我的函数has_rows();在查看我的所有行后变为false。这可能吗?

所以我想我的问题是,如果有可能,以及如何在while循环中循环一个函数,如下例所示。我知道这是可能的,因为wordpress使用了一个函数,我的问题是如何。

这就是我尝试过的。循环不会停止。

function has_rows () {
    global $Q_INFO;
    global $DB_CONN;

    static $COUNT; // STATIC TO REMEMBER LAST TIME FUNCTION CALLED
    $COUNT = @$COUNT ? $COUNT++ : 0; // IF NOT SET, SET TO 0 AND COUNT EACH LOOP

    echo $QUERY = "SELECT * FROM `" . $Q_INFO['table'] . "` LIMIT " . $COUNT . ", 1";

    $STMT = $DB_CONN->prepare($QUERY);
    $STMT->execute();

    $RESULT = $STMT->get_result();

    $STMT->close();

    if ($RESULT->num_rows > 0) {
        return true;
    } else {
        return false;
    }
}

我就像在wordpress中一样调用它:

<?php if (has_rows()):?>
    <?php while (has_rows()): ?>
        Hi World!!
    <?php endwhile; ?>
<?php endif; ?>

这是我的最终代码: 我必须为if(has_rows()):中函数的第一次调用添加另一个静态变量,然后我使用下面选择的答案来完成剩下的工作。

感谢帮助人员!

function has_rows () {
global $Q_INFO;
global $DB_CONN;

static $I = 0;
static $COUNT = 0;

if ($I == 0) {
    $QUERY = "SELECT * FROM `" . $Q_INFO['table'] . "`";
    $I++;
} else {
    $QUERY = "SELECT * FROM `" . $Q_INFO['table'] . "` LIMIT " . $COUNT . ", 1";
    $COUNT++;
}

$STMT = $DB_CONN->prepare($QUERY);
$STMT->execute();

$RESULT = $STMT->get_result();

$STMT->close();

if ($I != 0) {
    while ($ROW = $RESULT->fetch_assoc()) {
        foreach ($ROW as $KEY=>$VALUE) {
            $Q_INFO[$KEY] = $VALUE;
        }
    }
}

if ($RESULT->num_rows > 0) {
    return true;
} else {
    return false;
}
}

2 个答案:

答案 0 :(得分:1)

第一次运行时,$COUNT0,其值为布尔false。因此,$COUNT = @$COUNT ? $COUNT++ : 0;再次将其设置为0

只需取出该行,明确初始化$COUNT0,并将$COUNT++;置于最终if声明之前。

function has_rows () {
    global $Q_INFO;
    global $DB_CONN;

    static $COUNT = 0; // STATIC TO REMEMBER LAST TIME FUNCTION CALLED
    // Other code here...
    $COUNT++;
    if ($RESULT->num_rows > 0) {
        return true;
    } else {
        return false;
    }
}

答案 1 :(得分:1)

如果您尝试过像一个数组,就像wordpress一样,试试这个:

$posts = array('post1', 'post2', 'post3');

function has_posts()
{
    // this line will make sure that you have a non empty array
    if ( ! is_array($posts) or ! count($posts)) return false;
    else return each($posts);
}

while ($post = has_posts())
{
    echo $post;
}