2013-12-13 136 views
0

我試圖循環播放一個類似於WordPress的函數。我使用該函數返回true或false的布爾值。現在,這是我的功能。現在,只有它返回true或false,我知道我必須讓我的函數has_rows();更改爲false後,它遍歷我所有的行。這可能嗎?循環播放函數like_posts

所以我想我的問題是,如果它是可能的,以及如何循環一個函數在一個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; 
} 
} 

回答

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; 
    } 
} 
+0

這是完美的,但它只是解決了我的謎語的第二部分,在第一個電話'如果(has_rows())'是第一個調用,所以如果我調用該函數,則count比第一行多1,因此我必須在方程中添加第二個變量$ I,然後在其中使用您的答案。 –

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; 
} 
+0

輸出數組將無法簡單地確定if(have_posts())'我將不得不做'if(count(have_posts())> 0)'並且這是寫入次數的兩倍,並且在很多php頁面,這是一個很大的時間保存。但感謝這個想法:) –

+0

而你說像wordpress,這不是wordpress如何做到這一點。 –

+0

您不能使用與迭代器AND相同的函數作爲檢查,以確保數組不是空的。 –