Я использовал такой код:
$a = [];
$a['a'] = 1;
$text1 = [];
foreach ($b as $item)
{
$text1[] = $item['1'];
}
$a['text1'] = implode(',', $text1);
$text2 = [];
foreach ($b as $item)
{
$text2[] = $item['2'];
}
$a['text2'] = implode(',', $text2);
мой коллега повторил это так:
$a = [];
$a['a'] = 1;
$a['text1'] = call_user_func(function() use ($b) {
$text1 = [];
foreach ($b as $item)
{
$text1[] = $item['1'];
}
return implode(',', $text1);
}();
$a['text2'] = call_user_func(function() use ($b) {
$text2 = [];
foreach ($b as $item)
{
$text2[] = $item['2'];
}
return implode(',', $text2);
}();
его причина: это увеличивает инкапсуляцию, и в моем первом примере будут переменные$text1
, $text2
) если я их не сбросил.
Да, я согласен с вашим коллегой — имеет смысл использовать замыкания для инкапсуляции кода.
Однако все, что у вас есть, можно упростить до этого:
<?php
$a = [
'a' => 1,
'text1' => implode(',', array_column($b, '1')),
'text2' => implode(',', array_column($b, '2')),
];
Для справки смотрите:
Других решений пока нет …