我正在尝试创建一个非常简单的数据库驱动的块构建器,用于一些有趣的圣诞节编码。目前,我以正确的顺序从数据库中获取所有块,然后运行foreach来循环它们:
function get_blocks() {
global $db;
$GLOBALS['current_page_id'] = get_page_id();
$stm = $db->prepare("SELECT * FROM page_blocks WHERE page_id = :id ORDER BY `block_order` ASC");
$stm->execute(array(':id' => 1));
$res = $stm->fetchAll();
return $res;
}
$blocks = get_blocks();
foreach($blocks as $block) {
if($block['block_name'] == 'block-type-1') {
//code to execute
}
}
它有效,但我需要能够对每个块应用一个类似于(是的,我知道这不起作用):
foreach($blocks as have_block($block))
有没有办法按顺序循环访问数据库中的块,然后将函数应用于结果?
我认为array_walk
是你需要的:http://php.net/manual/en/function.array-walk.php
array_walk($blocks, 'some_function');
您可以使用
"array_map"(请参阅文档),如下所示:
$blocks = array_map(function ($block) {
// Do what you need to do;
return $block;
}, $blocks);
使用 array_map() 函数。
这会将回调应用于每个数组元素。
例如
<?php
function cube($n)
{
return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>
输出:
Array
(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
你可以试试:
foreach($blocks as $block) {
$new_block[] = some_function($block);
}