[英]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.