簡體   English   中英

While遍歷數組

[英]While Loop Through An Array

創建一個塊生成器,該塊生成器按順序循環訪問從表單數據庫提取的塊。

if( loop_blocks()) {
    while( loop_blocks()) {
        if( have_block('standard-content-block')) {
            echo 'standard-content-block';
        }

        elseif( have_block('executive-intro-block')) {
            echo 'executive intro block';
        }
    }
}

我的功能loop_blocks按順序從數據庫中提取塊,並將數組設置為全局變量:

function loop_blocks() {
        global $db;

        $page_id = get_page_id();
        $GLOBALS['loop_position'] = 0;
        $loop_position = $GLOBALS['loop_position'];

        $stm = $db->prepare("SELECT * FROM page_blocks WHERE page_id = :id ORDER BY `block_order` ASC");
        $stm->execute(array(':id' => $page_id));
        $res = $stm->fetchAll();
        $GLOBALS['block_loop'] = $res;
        if(!$res) {
            return false;
        } elseif(!$GLOBALS['block_loop'][$loop_position]) {
            return false;
        } else {
            return true;
        }
    }

函數have_block獲取當前循環位置,並確定所確定的名稱是否存在於數組中並增加循環位置:

function have_block($block_name) {
        $loop_position = $GLOBALS['loop_position'];

        if(!$GLOBALS['block_loop'][$loop_position]) {
            return false;
        } elseif(!$GLOBALS['block_loop'][$loop_position][block_name] = $block_name) {
            return false;
        } else {
            $GLOBALS['loop_position'] = $loop_position+1;
            return true;
        }
    }

這將返回一個無限循環,但是我無法找到將while循環移至下一步的方法嗎?

編輯我正在使用while循環,因為函數have_block將為當前塊ID設置一個全局變量。 然后將在稱為the_element的函數中使用它。 如:

if( loop_blocks()) {
    while( loop_blocks()) {
        if( have_block('standard-content-block')) {
            the_element('heading');
        }
    }
}

如果不使用功能have_block進行設置,則需要將foreach循環中的塊ID作為第二個參數傳遞給每個元素。

我通過@Jim修復了此問題,並指出我正在loop_blocks()中重新設置loop_position,這就是while循環無限重復的原因。 這是鍵入時出現錯誤的簡單情況:

} elseif(!$GLOBALS['block_loop'][$loop_position][block_name] = $block_name) {
        return false;

本來應該:

} elseif($GLOBALS['block_loop'][$loop_position][block_name] != $block_name) {
        return false;

請注意,我在錯誤的地方有感嘆號。 現在,根據我的需要,它可以完美運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM