2014-12-31 5 views
1

Я пытаюсь создать очень простой блок-построитель, управляемый базой данных, для какой-то забавной рождественской кодировки. На данный момент я получаю все блоки в правильном порядке из базы данных, а затем запустить Еогеасп цикл по ним:Как применить функцию к каждому результату 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)) 

есть ли способ Переберите блоки из базы данных в порядке, а затем применить функцию к результату?

+0

'Еогеасп ($ блоков, как $ блок)' и следующая строка: ' $ block = function ($ block); '? Если это помогает/делает трюк – Rizier123

+0

'array_walk' или' array_map'? – Jasper

ответ

0

Вы можете попробовать: функцию

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

Использование 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 
) 
1

Вы можете использовать '' array_map '' (see socumentation) как

$blocks = array_map(function ($block) { 
    do what you need to do; 
    return $block; 
}, $blocks); 
Смежные вопросы