проблемой нужен что-то вроде flatMap .
и тут скорее всего это уже обсуждали, но может кто-нибудь из мидло-джуниоров написать на пхп аналог flatMap?
Например:
$arr = [
'a' => 1,
'b' => [
'c' => 2,
'd' => 3
],
'e' => [
'f' => [
'g' => 4,
],
'h' => [
'k' => 5
],
],
'i' => 6
];
Должно вернуть:
(
[a] => 1
[b_c] => 2
[b_d] => 3
[e_f_g] => 4
[e_h_k] => 5
[i] => 6
)
Сениоры могут просто сказать одно ключевое "словосочетание" если им интерестно, но лень.
Забавно то, что я уже писал подобное лет 5 назад, но тогда мне пришлось пробрасывать переменную по ссылке. а теперь все намного проще 🙂
а flatMap немного о другом) эта хрень рекурсией в 5 строк решается, а чтоб стандартными пхп функциями даже хз)
function flatten($a) { $f = function ($a, $p = []) use (&$f) { foreach ($a as $k => $v) yield from (function ($v, $p) use (&$f) { if (!is_array($v)) return [join('_', $p) => $v]; return $f($v, $p); })($v, array_merge($p, [$k])); }; return iterator_to_array($f($a)); }
Обсуждают сегодня