如何将函数应用于每个foreach结果?

时间:2014-12-31 11:04:11

标签: php function foreach block builder

我正在尝试创建一个非常简单的数据库驱动的块构建器,用于一些有趣的圣诞节编码。目前,我从数据库中以正确的顺序获取所有块,然后运行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))

有没有办法按顺序循环遍历数据库中的块,然后将函数应用于结果?

4 个答案:

答案 0 :(得分:5)

我认为array_walk就是您所需要的:http://php.net/manual/en/function.array-walk.php

array_walk($blocks, 'some_function');

答案 1 :(得分:1)

使用array_map()函数。 这将回调应用于每个数组元素。 e.g。

<?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
)

答案 2 :(得分:1)

您可以使用&#39;&#39; array_map&#39;&#39; (see socumentation)喜欢

$blocks = array_map(function ($block) {
    do what you need to do;
    return $block;
}, $blocks);

答案 3 :(得分:0)

您可以尝试:

foreach($blocks as $block) {
 $new_block[] = some_function($block); 
}