Как применить функцию к каждому результату foreach?

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

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

1

Решение

я думаю что array_walk это то, что вам нужно: http://php.net/manual/en/function.array-walk.php

array_walk($blocks, 'some_function');
5

Другие решения

Используйте функцию 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 » (см. комментарии) лайк

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

Ты можешь попробовать:

foreach($blocks as $block) {
$new_block[] = some_function($block);
}
0
По вопросам рекламы [email protected]